布局管理
Tue 23 September 2025
布局管理
GTK3提供了多种布局管理器,如GtkBox、GtkGrid等。
以下是一个使用GtkBox的示例:
package main
import (
"github.com/gotk3/gotk3/gtk"
"log"
)
func main() {
gtk.Init(nil)
window, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
if err != nil {
log.Fatal("Unable to create window:", err)
}
window.SetTitle("Complex Layout")
window.Connect("destroy", func() {
gtk.MainQuit()
})
box, err := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
if err != nil {
log.Fatal("Unable to create box:", err)
}
label1, err := gtk.LabelNew("Label 1")
if err != nil {
log.Fatal("Unable to create label1:", err)
}
box.PackStart(label1, true, true, 0)
label2, err := gtk.LabelNew("Label 2")
if err != nil {
log.Fatal("Unable to create label2:", err)
}
box.PackStart(label2, true, true, 0)
window.Add(box)
window.ShowAll()
gtk.Main()
}
事件处理
GTK3的事件处理机制非常灵活。以下是一个按钮点击事件的示例:
package main
import (
"github.com/gotk3/gotk3/gtk"
"log"
)
func main() {
gtk.Init(nil)
window, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
if err != nil {
log.Fatal("Unable to create window:", err)
}
window.SetTitle("Event Handling")
window.Connect("destroy", func() {
gtk.MainQuit()
})
button, err := gtk.ButtonNewWithLabel("Click Me")
if err != nil {
log.Fatal("Unable to create button:", err)
}
button.Connect("clicked", func() {
log.Println("Button clicked!")
})
window.Add(button)
window.ShowAll()
gtk.Main()
}
并发处理
利用Golang的并发特性,可以在后台进行耗时操作,而不阻塞UI线程。
以下是一个简单的示例:
package main
import (
"github.com/gotk3/gotk3/gtk"
"log"
"sync"
)
func main() {
gtk.Init(nil)
window, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
if err != nil {
log.Fatal("Unable to create window:", err)
}
window.SetTitle("Concurrency")
window.Connect("destroy", func() {
gtk.MainQuit()
})
button, err := gtk.ButtonNewWithLabel("Start Task")
if err != nil {
log.Fatal("Unable to create button:", err)
}
button.Connect("clicked", func() {
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// 模拟耗时操作
log.Println("Task started")
// 这里可以执行耗时任务
log.Println("Task completed")
}()
wg.Wait()
})
window.Add(button)
window.ShowAll()
gtk.Main()
}
资源管理
合理管理资源是提高应用性能的关键。GTK3提供了多种资源管理机制,如引用计数、对象池等。确保在不需要时释放资源,避免内存泄漏。
例子 #go #go-gtk #gotk
Category: 编程go