programming/go

examples
Edited: Saturday 28 June 2025

布局管理

GTK3提供了多种布局管理器,如GtkBox、GtkGrid等。

以下是一个使用GtkBox的示例:

 1package main
 2
 3import (
 4	"github.com/gotk3/gotk3/gtk"
 5	"log"
 6)
 7
 8func main() {
 9	gtk.Init(nil)
10
11	window, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
12	if err != nil {
13		log.Fatal("Unable to create window:", err)
14	}
15	window.SetTitle("Complex Layout")
16	window.Connect("destroy", func() {
17		gtk.MainQuit()
18	})
19
20	box, err := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
21	if err != nil {
22		log.Fatal("Unable to create box:", err)
23	}
24
25	label1, err := gtk.LabelNew("Label 1")
26	if err != nil {
27		log.Fatal("Unable to create label1:", err)
28	}
29	box.PackStart(label1, true, true, 0)
30
31	label2, err := gtk.LabelNew("Label 2")
32	if err != nil {
33		log.Fatal("Unable to create label2:", err)
34	}
35	box.PackStart(label2, true, true, 0)
36
37	window.Add(box)
38	window.ShowAll()
39	gtk.Main()
40}

事件处理

GTK3的事件处理机制非常灵活。以下是一个按钮点击事件的示例:

 1package main
 2
 3import (
 4	"github.com/gotk3/gotk3/gtk"
 5	"log"
 6)
 7
 8func main() {
 9	gtk.Init(nil)
10
11	window, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
12	if err != nil {
13		log.Fatal("Unable to create window:", err)
14	}
15	window.SetTitle("Event Handling")
16	window.Connect("destroy", func() {
17		gtk.MainQuit()
18	})
19
20	button, err := gtk.ButtonNewWithLabel("Click Me")
21	if err != nil {
22		log.Fatal("Unable to create button:", err)
23	}
24	button.Connect("clicked", func() {
25		log.Println("Button clicked!")
26	})
27
28	window.Add(button)
29	window.ShowAll()
30	gtk.Main()
31}

并发处理

利用Golang的并发特性,可以在后台进行耗时操作,而不阻塞UI线程。

以下是一个简单的示例:

 1package main
 2
 3import (
 4	"github.com/gotk3/gotk3/gtk"
 5	"log"
 6	"sync"
 7)
 8
 9func main() {
10	gtk.Init(nil)
11
12	window, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
13	if err != nil {
14		log.Fatal("Unable to create window:", err)
15	}
16	window.SetTitle("Concurrency")
17	window.Connect("destroy", func() {
18		gtk.MainQuit()
19	})
20
21	button, err := gtk.ButtonNewWithLabel("Start Task")
22	if err != nil {
23		log.Fatal("Unable to create button:", err)
24	}
25	button.Connect("clicked", func() {
26		var wg sync.WaitGroup
27		wg.Add(1)
28		go func() {
29			defer wg.Done()
30			// 模拟耗时操作
31			log.Println("Task started")
32			// 这里可以执行耗时任务
33			log.Println("Task completed")
34		}()
35		wg.Wait()
36	})
37
38	window.Add(button)
39	window.ShowAll()
40	gtk.Main()
41}

资源管理

合理管理资源是提高应用性能的关键。GTK3提供了多种资源管理机制,如引用计数、对象池等。确保在不需要时释放资源,避免内存泄漏。

例子 go go-gtk gotk

Backlinks

See Also