GTK# 入门
最后修改于 2023 年 10 月 18 日
在本 GTK# 编程教程中,我们迈出编程的第一步。 我们创建简单的程序。
简单示例
第一个代码示例是一个简单的例子,展示了一个居中的窗口。
using Gtk; class SharpApp : Window { public SharpApp() : base("Center") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; Show(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }
代码示例在屏幕中心显示一个小窗口。
$ gmcs -pkg:gtk-sharp-2.0 center.cs
这是我们编译代码示例的方法。
using Gtk;
现在我们可以直接使用 Gtk
命名空间中的对象了。 我们可以写 Window
而不是 Gtk.Window
。
class SharpApp : Window {
我们的应用程序基于 SharpApp
类。 这个类继承自 Window
类。
public SharpApp() : base("Center") { ... }
这是构造函数。 它构建了我们的应用程序。 它还通过 base
关键字调用其父构造函数。
SetDefaultSize(250, 200);
这行代码为我们的窗口设置默认大小。
SetPosition(WindowPosition.Center);
这行代码将窗口居中于屏幕上。
DeleteEvent += delegate { Application.Quit(); };
我们将一个委托连接到 DeleteEvent
。 当我们点击标题栏中的关闭按钮时,或者按下 Alt+F4 时,会触发此事件。 我们的委托将彻底退出应用程序。
Show();
现在我们显示窗口。 在我们调用 Show
方法之前,窗口是不可见的。
public static void Main() { Application.Init(); new SharpApp(); Application.Run(); }
Main
方法是应用程序的入口点。 它启动并运行程序。
图标
在下一个示例中,我们显示应用程序图标。大多数窗口管理器在标题栏的左角以及任务栏上显示该图标。
using Gtk; using System; class SharpApp : Window { public SharpApp() : base("Icon") { SetDefaultSize(250, 160); SetPosition(WindowPosition.Center); SetIconFromFile("web.png"); DeleteEvent += new DeleteEventHandler(OnDelete); Show(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } void OnDelete(object obj, DeleteEventArgs args) { Application.Quit(); } }
代码示例显示了应用程序图标。
SetIconFromFile("web.png");
SetIconFromFile
方法为窗口设置图标。 图像从当前工作目录的磁盘中加载。
DeleteEvent += new DeleteEventHandler(OnDelete);
这是另一种将事件处理程序连接到事件的方法。 它只是稍微冗长一些。
void OnDelete(object obj, DeleteEventArgs args) { Application.Quit(); }
这是删除事件的事件处理程序。

按钮
在下一个例子中,我们将使用 GTK# 库进一步增强我们的编程技能。
using Gtk; class SharpApp : Window { public SharpApp() : base("Buttons") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; Fixed fix = new Fixed(); Button btn1 = new Button("Button"); btn1.Sensitive = false; Button btn2 = new Button("Button"); Button btn3 = new Button(Stock.Close); Button btn4 = new Button("Button"); btn4.SetSizeRequest(80, 40); fix.Put(btn1, 20, 30); fix.Put(btn2, 100, 30); fix.Put(btn3, 20, 80); fix.Put(btn4, 100, 80); Add(fix); ShowAll(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }
我们在窗口上显示四个不同的按钮。 我们将看到容器小部件和子小部件之间的区别,并将更改子小部件的一些属性。
Fixed fix = new Fixed();
Fixed
小部件是一个不可见的容器小部件。 其目的是包含其他子小部件。
Button btn1 = new Button("Button");
Button
是一个子小部件。 子小部件放置在容器内。
btn1.Sensitive = false;
我们使此按钮失效。 这意味着我们无法单击它。 图形上小部件是灰色的。
Button btn3 = new Button(Stock.Close);
第三个按钮在其区域内显示一个图像。 GTK# 库内置了我们可以使用的图像。
btn4.SetSizeRequest(80, 40);
在这里我们更改按钮的大小。
fix.Put(btn1, 20, 30); fix.Put(btn2, 100, 30); ...
在这里我们将按钮小部件放置在固定容器小部件内。
Add(fix);
我们将 Fixed
容器设置为我们的 Window
小部件的主容器。
ShowAll();
我们可以调用 ShowAll
方法,或者我们可以在每个小部件上调用 Show
方法。 包括容器。

在本章中,我们创建了 GTK# 编程库中的第一个程序。