programming/go
examplesmodified | 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提供了多种资源管理机制,如引用计数、对象池等。确保在不需要时释放资源,避免内存泄漏。