Calc# - Gtk# 入门






2.55/5 (17投票s)
2005年3月6日
6分钟阅读

90215

439
介绍 Mono、Gtk# 和 Glade 的开源社区。学习如何编写跨平台的 GUI 软件。
引言
Mono 使开发人员能够轻松地构建 Linux 和跨平台应用程序。Mono 的 .NET 实现基于 C# 的 ECMA 标准。GTK+ 是一个用于创建图形用户界面的多平台工具包。GTK+ 提供了完整的控件集,适用于从小型一次性项目到完整应用程序套件的各种项目。Gtk# 是 GTK+ 工具包的 .NET 语言绑定。Glade 提供了一个简单的界面,可以高效快速地设计应用程序 GUI。
本文将教您如何使用 Gtk# 和 mono 编写跨平台 GUI 应用程序,以及如何使用 glade 创建 GUI 界面。使用 Glade 设计 GUI 在某种程度上类似于在 Visual Studio 中设计窗体。尽管本文的范围仅限于 Windows 2000 或类似系统,但这些概念同样可以扩展到 Linux 或其他平台。
入门
要开始,您首先需要构建应用程序所需的所有软件。最重要的一点是 mono,可以从 mono 网站 下载。只需下载 Windows 安装程序并进行安装。我知道您自己就能完成。此安装程序还包括 GTK# 包。现在,您需要运行 mono 安装目录的 bin 文件夹中的 setmonopath.bat 文件来设置环境变量。我不知道为什么,它对我来说从来不起作用,所以我必须手动将该路径添加到环境变量中。
安装 mono 后,您需要安装 Glade。从 source forge 网站下载并安装 Glade。您需要下载并安装 Gtk+/Win32 开发环境。现在您已准备好开始编码,但请稍等,我们不会在记事本中编码,所以您需要 Visual Studio .NET。这是我的首选编辑器,对我们来说也更熟悉。您也可以使用 SharpDevelop,它是从 SharpDevelop 网站免费提供的。但在这里,我们将使用 Visual Studio .NET。现在,我们一切就绪,可以开始任务了,9 8 7 6 5 4 3 2 1 开始 Glade……
Glade
作为 Windows 开发人员,您会很高兴知道使用 glade 设计 GUI 与在 VC++ 中设计对话框或在 .NET 中设计 Win Forms 类似。只需运行“glade-2.exe”,您将在屏幕上看到三个窗口。第一个是主窗口,带有菜单和工具栏。它帮助您创建新项目,保存和打开当前项目。另一个看起来有很多控件图标,标题为“Palette”。这些控件在 Linux 和 mono 中称为 widgets。您会看到一些图标,如横向框(horizontal box)和纵向框(vertical Box)。这是 glade 和 Win Forms 的主要区别之一。这些框是不可见的,用于打包其他控件,它们就像一个容器。通过将 widgets 放入框中,您可以创建在不同窗口大小下保持一致的布局,并可以使框垂直或水平排列。
现在,单击调色板栏中的窗口图标。屏幕上会出现一个新窗口。这是您的应用程序窗口 GUI,您需要对其进行修改。在属性窗口中,您可以看到该窗口的属性。从属性窗口中,您可以编辑窗口的标题和将在程序中使用的变量名。在属性窗口中将“Type Hint”更改为“Menu”,这样,当您运行应用程序时,最大化和最小化按钮将不会出现。为销毁事件(当用户单击关闭按钮时触发)添加一个事件处理程序。
现在,向这些纵向框(除了顶部的纵向框)添加一些纵向框和一些横向框。在顶部的纵向框中添加一个编辑框。编辑框在 GTK# 中称为 Entry。向每个框中添加一些按钮。将内边距设置为 5,宽度设置为 35,高度设置为 30。相应地设置标签。为第一行按钮添加一个事件处理程序和加速键。
创建用于打包 widgets 的框。
向 GUI 添加文本输入框和固定位置。
添加按钮和菜单栏。为第一行按钮设置按钮的标签、高度、宽度、内边距、加速键和信号处理程序。
等等,等等!只说单击这里,然后单击那里是没有用的,因为我还使用了其他一些 widgets 来使 GUI 更具吸引力,例如 ToggleButton、Fixed Positions 和 Menu Bars。所以,我建议您打开“calculator.glade”文件,看看我做了什么。我们称之为逆向工程,最好的培训工具。完成 GUI 后,只需保存项目文件。从现在开始,只需将项目名称更改为 calculator,然后安全地忽略所有其他内容。这将创建一个扩展名为“.glade”的 XML 文件,其中包含有关 GUI 的所有信息以及我们将通过它在代码中访问它的 widgets 的变量名,以及所有事件处理程序和 widgets 属性信息。我建议您参考 CodeProject 上的“A Google search application using GTK#”以获取更多相关信息。
编码
现在所有的准备都做好了,但射击还没有开始。我们的英雄“Mono”在哪里?所以,让我们让我们的英雄登上中心舞台。Mono 是一个开源 C# 编译器,我们将用它来编译我们的程序,该程序将使用 glade 生成的 XML 文件中的 GUI 界面。
要使用 GTK# 的所有类和功能,我们首先需要导入其命名空间。所以,导入所有命名空间
using Gtk;
using Gdk;
using Glade;
using GtkSharp;
using System;
using System.Text;
之后,我们将声明一个名为 Calculator
的类和一个静态的 Main
函数作为程序的入口点。在 Main
函数中,我们创建一个 Calculator
类的对象。由于 Main
被定义为静态的,它将由编译器自动调用。
在我们的类构造函数中,我们将通过调用 Application.Init();
来初始化 GTK#。现在,我们创建一个 Glade.XML
对象,其中包含 GUI 描述。我们将 XML 文件名和顶层 widget 传递给 Glade.XML
构造函数。Autoconnect(this)
方法会简单地创建控件,并将其连接到 XML 文件中定义的相应事件处理程序。Run 会将控制流引导到主事件循环。
现在我们将编写窗口删除事件处理程序,通过编写一个名为 OnWindowDeleteEvent
的函数,并将其参数设置为对象(对发送对象的引用)和 DeleteEventArgs
。函数名应与 glade 在 XML 文件中定义的名称相同。删除事件执行两项任务,首先它通过调用 Application.Quit();
来退出主事件循环,其次它将 args.RetVal
设置为 true
,从而阻止任何后续处理程序接收此事件。
编译
C:\>mcs /unsafe –r gtk-sharp.dll –r gdk-sharp.dll –r glade-sharp.dll calculator.cs
C:\>mono calculator.exe
参考
- Mono – 开发人员笔记本
作者:Edd Dumbill 和 Niel M.Bornstein。