【.NET Core 跨平台 GUI 开发】第一篇:编写你的第一个 Gtk# 应用

本文是【.NET Core 跨平台 GUI 开发】系列博文的第一篇。该系列博文是一个关于 Gtk# 跨平台应用开发的初级随笔集合。该随笔集合介绍了 GTK 和 Gtk# 的基本信息以及开发方法,并展示了如何使用 .NET Core 技术栈开发基于 Gtk# 的跨平台 GUI 程序。

博文假设你已经对 C# 有一定的了解且熟悉事件驱动,所使用的电脑中已经安装好了 Visual Studio 以及 .NET Core 开发环境。如果你熟悉 WinForm 应用程序的开发,那么你将轻松不少。

1、GTK 和 Gtk#

什么是 GTK ?

GTK(原名GTK+)最初是GIMP的专用开发库(GIMP Toolkit),后来发展为Unix-like系统下开发图形界面的应用程序的主流开发工具之一。GTK是自由软件,并且是GNU计划的一部分。自2019年2月6日起,GTK+改名为GTK。

维基百科:https://zh.wikipedia.org/wiki/GTK

什么是 Gtk# ?

Gtk#是个.NET的库,用来绑定GTK+ GUI库。它让你可以使用Mono或其他兼容CLR的语言来开发GNOME应用程序。

Gtk#像其他现在的视窗库一样,采用事件驱动,让开发者可以在视窗组件的事件被触发时,处理要做的事情。

以Gtk#创建的应用程序可以运行在许多平台上,如Linux、Microsoft Windows与Mac OS X等。

维基百科:https://zh.wikipedia.org/wiki/Gtk%E2%99%AF

简单来说 GTK 是一款在类 Unix 系统下进行图形界面开发的工具。Gtk# 是一个 .NET 的库,他对 GTK 进行了包装,这样我们就可以使用 C# 来调用 GTK 进行图形界面开发。因为 GTK 非常流行且是自由软件,所以 Gtk# 可以在许多平台上运行。

我们要使用的 Gtk# 来自 https://github.com/GtkSharp/GtkSharp ,是 Mono Gtk Sharp 的一个分支。该版本的 Gtk# 组件提供了对 .NET Core 和 GTK3 的支持、发布了 NuGet 包并提供了在 Windows 下无需安装的运行环境。

2、在 Mac OS 系统中安装 GTK

如果你使用 Mac OS 进行开发,那么在开始之前,你需要在本机安装好 GTK 环境。安装过程并不复杂,如果你在中国大陆,你可能需要一个强壮有力的网络,这将为你带来流畅的安装体验。具体的安装过程参见: Installing Gtk on Mac 。

3、第一个 Gtk# 应用

打开 Visual Studio 新建一个 .NET Core 控制台应用并命名为 Gtk.HelloWorld 。在项目创建好后,通过 NuGet 将 GtkSharp 引用到项目中。如果你对 NuGet 并不熟悉,可以参考这篇文章:在 Visual Studio 中安装和管理 NuGet 包 。

为 Hello World 应用安装 GtkSharp 包

将以下代码粘贴到 Programe.cs 文件中:

using System;using Gtk;namespace Gtk.HelloWorld{
class Program
{
static void Main(string[] args)
{
Application.Init();
var win = new Window("Hello World!");
win.SetDefaultSize(300, 600);
//窗体关闭后退出应用
win.DeleteEvent += (s, e) =>
{
Application.Quit();
};
win.WindowPosition = WindowPosition.Center;
win.Resizable = false;
var label = new Label("This is a label!");
win.Add(label);
win.ShowAll();
Application.Run();
Console.WriteLine("Hello World!");
}
}}

点击菜单栏中的 ” 调试 ” -> ” 开始调试 ” 或者直接按 “ F5 ”键运行程序调试。在编译完成并启动后,就可以看到一个控制台的黑框紧接着在屏幕的中央出现了一个 300*600 的窗体,我们的 Hello World 就完成了。

运行 Hello World

如果你是第一次运行 Gtk# 程序且本机并没有安装 Gtk 环境,那么编译的时间会稍微长一些。如果你恰巧网络环境不是很好,访问 GitHub 速度很慢,那么你可能会遇到 Visual Studio 提示下面这个错误:

 Gtk has not been detected, downloading and installing it, set SkipGtkInstall to True to skip theese steps. 

这是因为 Gtk# 的程序包在编译时会尝试检测本地是否安装有 GTK 环境,如果没有安装,那么他会自己去 GitHub 上下载一份回来并解压,如果下载解压失败,就会提示上面的错误。(详情可参看:GtkSharp.targets)。

目前来说(2019年11月19日),Gtk# 的默认检测地址是:

$(LOCALAPPDATA)\Gtk\3.24

这个地址在我的电脑上的绝对路径是: C:\Users\Killer\AppData\Local\Gtk\3.24 。其中 Killer 是我电脑的登录用户名,你可能需要将其替换掉才能找到正确的位置。如果这个位置中不包含 Gtk 的运行时文件,那么程序会尝试去 https://github.com/GtkSharp/Dependencies/raw/master/gtk-3.24.zip 下载,并解压到该位置。

除了改善网络环境,我们还可以手动将运行时安装到本地电脑。手动安装的步骤如下:

  1. 确保你找到了正确的 Gtk 运行时路径并建立好了文件夹(比如:C:\Users\Killer\AppData\Local\Gtk\3.24 )。

  2. 使用下载工具(比如:IDM、迅雷、QQ旋风等)下载文件 https://github.com/GtkSharp/Dependencies/raw/master/gtk-3.24.zip 到本地。

  3. 将下载到的文件解压缩,并将所有文件复制到 Gtk 运行时文件夹。

  4. 操作完成后的 Gtk 运行时文件夹类似下图:

Gtk 运行时文件夹

现在,你的应用程序应该可以正常运行起来了。

4、程序分析

Hello World 程序的代码可以在 gtk-sharp-demo/Gtk.HelloWorld 中找到。

如果你开发过 WinForm 程序,你可能会注意到的第一件事是我们没有为 Label 添加布局代码。比如,我们没有规定 label.Left = 100 或 label.Width = 200 ,我们只是将 label 添加到窗体中:win.Add(label);。这是因为 Gtk.Window 是从 Bin 继承的窗口小部件,或者是承载“Container”的单个窗口小部件。这可能有些难以理解,但是目前你可以仅仅记住,Gtk.Window 只能直接包含一个部件。

另一个值得关注的部分是 Application.Init() 和 Application.Run() 。通常,当应用程序处理完其主线程上的所有代码后,应用程序将停止。因为 Gtk.Window 的 ShowAll() 方法不会阻止主线程,因此代码将继续运行并关闭。 Application.Init() 命令告诉运行时监听所有启动的 Gtk.Window ,当运行 Application.Run() 命令时,它将在这些窗口上启动主循环。这将使应用程序保持运行状态,直到我们调用 Application.Quit() 方法退出程序。

Gtk.Window 类型的 SetDefaultSize 方法用来设置窗体的默认大小。WindowPosition 属性可以获取或设置窗体出现的位置。Resizable 属性可以决定是否允许用户手动调整窗体的大小,当这个属性设置为 flase 时,窗体就不能通过鼠标拖动改变大小了,同时最大化按钮也被禁用掉了。

在 WinForm 中,我们通过注册 Closed 事件来在窗体关闭后做一些事情,在 Gtk# 中需要改为 DeleteEvent 事件。在主窗体被删除时退出程序是一步很关键的操作,否则会出现所有窗体都关闭了但是应用程序没有退出的情况。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然可以,以下是一些在 GitHub 和 Gitee 上比较流行的 GTK# 应用代码仓库: 1. GNOME Calculator (GitHub: https://github.com/GNOME/gnome-calculator, Gitee: https://gitee.com/mirrors/gnome-calculator):GNOME 计算器是一个简单、易用的计算器应用,它使用 GTK# 和 C# 语言进行开发。它的代码仓库非常规范和易于阅读,可以作为学习 GTK# 应用开发的优秀参考。 2. GNOME Music (GitHub: https://github.com/GNOME/gnome-music, Gitee: https://gitee.com/mirrors/gnome-music):GNOME 音乐是一个音乐播放器应用,它使用 GTK# 和 C# 语言进行开发。它的代码仓库非常完整和规范,包含了各种常见的 GTK# 控件和布局管理器的使用方法,可以帮助你快速掌握 GTK# 应用开发的技能。 3. Gtranslator (GitHub: https://github.com/GNOME/gtranslator, Gitee: https://gitee.com/mirrors/gtranslator):Gtranslator 是一个 GNOME 平台下的翻译工具,它使用 GTK# 和 C# 语言进行开发。它的代码仓库包含了一些比较复杂的 GTK# 控件和布局管理器的使用方法,可以帮助你深入理解 GTK# 应用开发的技术细节。 4. GTK# Samples (GitHub: https://github.com/mono/gtk-sharp-samples, Gitee: https://gitee.com/majunmin/gtk-sharp-samples):GTK# Samples 是一个 GTK# 应用示例集合,包含了各种常见的 GTK# 控件和布局管理器的使用方法,非常适合初学者进行学习和实践。 以上是一些比较优秀的 GTK# 应用代码仓库,你可以根据自己的需求选择相应的项目进行学习和参考。希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值