日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發布時間:2023/12/4 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【.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?下載,并解壓到該位置。

除了改善網絡環境,我們還可以手動將運行時安裝到本地電腦。手動安裝的步驟如下:

  • 確保你找到了正確的 Gtk 運行時路徑并建立好了文件夾(比如:C:\Users\Killer\AppData\Local\Gtk\3.24 )。

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

  • 將下載到的文件解壓縮,并將所有文件復制到 Gtk 運行時文件夾。

  • 操作完成后的 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?事件。在主窗體被刪除時退出程序是一步很關鍵的操作,否則會出現所有窗體都關閉了但是應用程序沒有退出的情況。

    總結

    以上是生活随笔為你收集整理的【.NET Core 跨平台 GUI 开发】第一篇:编写你的第一个 Gtk# 应用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。