Golang Gtk+3教程:開始


GTK+是一個控件工具包。每個通過GTK+創建的用戶界面由一些控件組成。
控件是層級式的,window控件是主容器,通過在window中添加按鈕、下拉菜單、輸入字段等其他控件構成用戶界面。
如果是復雜的用戶界面,推薦使用GtkBuilder(從XML UI描述文件創建界面)來代替手動編譯用戶界面。
你還可以使用可視化的界面編輯器,像Glade

GTK+是事件驅動的。這個工具包監聽像點擊按鈕一樣的事件並將其發送給你的應用。

為了使你初步了解如何使用GTK+,我們將創建一個Gtk應用。這個應用會創建一個200*200像素的空window

程序運行效果:

package main

import (
	"github.com/gotk3/gotk3/glib"
	"github.com/gotk3/gotk3/gtk"
	"log"
	"os"
)

func main() {
	const appId = "com.nayoso.example"
	//每個gtk3程序都需要一步
	app, err := gtk.ApplicationNew(appId, glib.APPLICATION_FLAGS_NONE)
	
	if err != nil {
		log.Fatal("Could not create application.", err)
	}
	
	//為activate事件綁定函數, activate會在程序啟動時觸發,也就是app.Run()時
	app.Connect("activate", func() {
		onActivate(app)
	} )

	app.Run(os.Args)	//運行gtkApplication
}

func onActivate(application *gtk.Application) {
	appWindow, err := gtk.ApplicationWindowNew(application)	//創建window控件

	if err != nil {
		log.Fatal("Could not create application window.", err)
	}
	//設置窗口屬性
	appWindow.SetTitle("Basic Application.")
	appWindow.SetDefaultSize(400, 400)
	//顯示窗口
	appWindow.Show()
}

gtk.ApplicationNew()接受兩個參數一個是 應用標識,其一般使用你域名的倒序形式。另一個是GApplicationFlags,其為了滿足你對應用的特定需求。通常就像實例代碼一樣寫glib.APPLICATION_FLAGS_NONE就可以了。

好的,我們已經創建了第一個窗口。但這只是一個孤零零的窗口,什么都沒有。
接下來我們就來顯示一個按鈕吧,並讓其輸出著名的Hello World 😄。

package main

import (
	"fmt"
	"github.com/gotk3/gotk3/glib"
	"github.com/gotk3/gotk3/gtk"
	"log"
	"os"
)

//這部分是相同的
func main() {
	const appId = "com.nayoso.example"
	app, err := gtk.ApplicationNew(appId, glib.APPLICATION_FLAGS_NONE)

	if err != nil {
		log.Fatal("Could not create application.", err)
	}

	app.Connect("activate", func() {
		onActivate(app)
	} )

	app.Run(os.Args)
}

//
func onActivate(application *gtk.Application) {

	appWindow, err := gtk.ApplicationWindowNew(application)
	if err != nil {
		log.Fatal("Could not create application window.", err)
	}
	appWindow.SetTitle("Basic Application.")
	appWindow.SetDefaultSize(400, 400)

	buttonBox, err := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 2)		//以水平布局創建一個容器, 第二個參數是其中控件的像素間隔
	if err != nil {
		log.Fatal(err)
	}
	appWindow.Add(buttonBox)	//將布局添加到window中

	button, err := gtk.ButtonNewWithLabel("Hello World")		//創建一個按鈕
	if err != nil {
		log.Fatal(err)
	}
	buttonBox.Add(button)		//將按鈕添加到box容器中

	button.Connect("clicked", func() {	//讓我們為按鈕點擊添加一個函數,每次點擊都會在命令行輸出Hello World
		fmt.Println("Hello World")
		appWindow.Destroy()		//摧毀窗口
	})


	appWindow.ShowAll()		//與Show()不同在於,它會輸出Window中的子控件。你可以修改,查看不同的效果
}

程序運行效果:


知識共享許可協議
本作品采用知識共享署名-非商業性使用-禁止演繹 4.0 國際許可協議進行許可。轉載請注明出處!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM