ZetCode

GTK# 入门

最后修改于 2023 年 10 月 18 日

在本 GTK# 编程教程中,我们迈出编程的第一步。 我们创建简单的程序。

简单示例

第一个代码示例是一个简单的例子,展示了一个居中的窗口。

center.cs
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 方法是应用程序的入口点。 它启动并运行程序。

图标

在下一个示例中,我们显示应用程序图标。大多数窗口管理器在标题栏的左角以及任务栏上显示该图标。

icon.cs
 
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();
}

这是删除事件的事件处理程序。

Icon
图:图标

按钮

在下一个例子中,我们将使用 GTK# 库进一步增强我们的编程技能。

buttons.cs
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 方法。 包括容器。

Buttons
图:按钮

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