programming/go
gtkmodified | Saturday 28 June 2025 |
---|
GTK(GIMP Toolkit)是一个广泛使用的跨平台图形用户界面开发工具包。它提供了丰富的控件和强大的功能,能够满足现代图形应用的开发需求。安装GTK库是使用其功能的前提。
Golang并不直接支持GTK,因此需要使用第三方库gotk3来实现GTK的功能绑定。这个库封装了GTK的API,使得Go开发者可以方便地使用GTK构建GUI应用。
实例一:创建一个简单的登录窗口:
package main
import (
"github.com/gotk3/gotk3/gtk"
"log"
)
func main() {
gtk.Init(nil)
win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
if err != nil {
log.Fatal("无法创建窗口:", err)
}
win.SetTitle("登录窗口")
win.SetDefaultSize(300, 200)
grid, err := gtk.GridNew()
if err != nil {
log.Fatal("无法创建网格:", err)
}
userLabel, err := gtk.LabelNew("用户名:")
if err != nil {
log.Fatal("无法创建标签:", err)
}
grid.Attach(userLabel, 0, 0, 1, 1)
userEntry, err := gtk.EntryNew()
if err != nil {
log.Fatal("无法创建输入框:", err)
}
grid.Attach(userEntry, 1, 0, 1, 1)
passLabel, err := gtk.LabelNew("密码:")
if err != nil {
log.Fatal("无法创建标签:", err)
}
grid.Attach(passLabel, 0, 1, 1, 1)
passEntry, err := gtk.EntryNew()
if err != nil {
log.Fatal("无法创建输入框:", err)
}
passEntry.SetVisibility(false)
grid.Attach(passEntry, 1, 1, 1, 1)
loginButton, err := gtk.ButtonNewWithLabel("登录")
if err != nil {
log.Fatal("无法创建按钮:", err)
}
grid.Attach(loginButton, 1, 2, 1, 1)
win.Add(grid)
win.ShowAll()
win.Connect("destroy", func() {
gtk.MainQuit()
})
gtk.Main()
}
实例二:创建一个带有菜单栏的主窗口:
package main
import (
"github.com/gotk3/gotk3/gtk"
"log"
)
func main() {
gtk.Init(nil)
win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
if err != nil {
log.Fatal("无法创建窗口:", err)
}
win.SetTitle("主窗口")
win.SetDefaultSize(800, 600)
vbox, err := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 0)
if err != nil {
log.Fatal("无法创建盒子:", err)
}
menubar, err := gtk.MenuBarNew()
if err != nil {
log.Fatal("无法创建菜单栏:", err)
}
fileMenu, err := gtk.MenuNew()
if err != nil {
log.Fatal("无法创建菜单:", err)
}
fileMenuItem, err := gtk.MenuItemNewWithLabel("文件")
if err != nil {
log.Fatal("无法创建菜单项:", err)
}
fileMenuItem.SetSubmenu(fileMenu)
newMenuItem, err := gtk.MenuItemNewWithLabel("新建")
if err != nil {
log.Fatal("无法创建菜单项:", err)
}
fileMenu.Append(newMenuItem)
menubar.Append(fileMenuItem)
vbox.PackStart(menubar, false, false, 0)
win.Add(vbox)
win.ShowAll()
win.Connect("destroy", func() {
gtk.MainQuit()
})
gtk.Main()
}