golang GTK3图形界面开发绑定插件库gotk3的使用
Golang GTK3图形界面开发绑定插件库gotk3的使用
gotk3项目为GTK 3及其相关项目提供了Go语言绑定。每个组件都有自己的子目录,作为包的导入路径使用。目前实现了以下库的部分绑定支持:
- GTK 3 (3.12及更高版本)
- GDK 3 (3.12及更高版本)
- GLib 2 (2.36及更高版本)
- Cairo (1.10及更高版本)
示例用法
基础示例
package main
import (
"github.com/gotk3/gotk3/gtk"
"log"
)
func main() {
// 初始化GTK,不解析任何命令行参数
gtk.Init(nil)
// 创建一个新的顶层窗口,设置标题,并连接到"destroy"信号以便在窗口销毁时退出GTK主循环
win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
if err != nil {
log.Fatal("无法创建窗口:", err)
}
win.SetTitle("简单示例")
win.Connect("destroy", func() {
gtk.MainQuit()
})
// 创建一个新的标签控件显示在窗口中
l, err := gtk.LabelNew("Hello, gotk3!")
if err != nil {
log.Fatal("无法创建标签:", err)
}
// 将标签添加到窗口
win.Add(l)
// 设置默认窗口大小
win.SetDefaultSize(800, 600)
// 递归显示窗口中包含的所有控件
win.ShowAll()
// 开始执行GTK主循环。这会阻塞直到gtk.MainQuit()被调用
gtk.Main()
}
构建示例:
$ go build example.go
如果要使用旧版GTK构建,可以使用gtk_3_10标签:
$ go build -tags gtk_3_10 example.go
应用示例
package main
import (
"log"
"os"
"github.com/gotk3/gotk3/glib"
"github.com/gotk3/gotk3/gtk"
)
// 用Go编写的简单Gtk3应用
// 这个应用在activate回调时创建一个窗口
func main() {
// 创建Gtk应用,将appID改为你应用的逆向域名
const appID = "org.gtk.example"
application, err := gtk.ApplicationNew(appID, glib.APPLICATION_FLAGS_NONE)
// 检查创建Gtk应用时是否有错误
if err != nil {
log.Fatal("无法创建应用.", err)
}
// 可用的应用信号
// startup -> 应用首次启动时设置
// activate -> 显示应用的默认第一个窗口(如新文档)。这对应于桌面环境启动应用
// open -> 打开文件并在新窗口中显示。这对应于有人尝试从文件浏览器等使用应用打开文档
// shutdown -> 执行关闭任务
// 设置activate信号与闭包函数
application.Connect("activate", func() {
// 创建应用窗口
appWindow, err := gtk.ApplicationWindowNew(application)
if err != nil {
log.Fatal("无法创建应用窗口.", err)
}
// 设置应用窗口属性
appWindow.SetTitle("基础应用.")
appWindow.SetDefaultSize(400, 400)
appWindow.Show()
})
// 运行Gtk应用
application.Run(os.Args)
}
安装
gotk3当前需要GTK 3.6-3.24、GLib 2.36-2.46和Cairo 1.10或1.12。还需要较新的Go版本(1.8或更高)。
使用废弃功能
默认情况下,构建中不包含废弃的GTK功能。
通过指定构建标签如gtk_3_20
,GTK 3.20或更早版本中废弃的任何功能将不可用。要在构建中启用废弃功能,添加gtk_deprecated
标签。
示例:
$ go build -tags "gtk_3_10 gtk_deprecated" example.go
对于gdk-pixbuf也有类似的标签:gdk_pixbuf_deprecated
许可证
gotk3包采用自由的ISC许可证授权。
更多关于golang GTK3图形界面开发绑定插件库gotk3的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang GTK3图形界面开发绑定插件库gotk3的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang GTK3 图形界面开发:gotk3 使用指南
gotk3 是 Go 语言绑定 GTK3 的工具库,允许开发者使用 Go 语言创建跨平台的图形界面应用程序。下面我将详细介绍 gotk3 的基本使用方法。
安装 gotk3
首先需要安装 gotk3 及其依赖:
# 安装 GTK3 开发库 (Ubuntu/Debian)
sudo apt-get install libgtk-3-dev
# 安装 gotk3
go get github.com/gotk3/gotk3/gtk
基础示例:创建窗口
package main
import (
"log"
"github.com/gotk3/gotk3/gtk"
)
func main() {
// 初始化 GTK
gtk.Init(nil)
// 创建主窗口
win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
if err != nil {
log.Fatal("无法创建窗口:", err)
}
// 设置窗口属性
win.SetTitle("GTK3 Go 示例")
win.SetDefaultSize(400, 300)
win.SetPosition(gtk.WIN_POS_CENTER)
// 连接窗口关闭事件
win.Connect("destroy", func() {
gtk.MainQuit()
})
// 创建按钮
btn, err := gtk.ButtonNewWithLabel("点击我")
if err != nil {
log.Fatal("无法创建按钮:", err)
}
// 连接按钮点击事件
btn.Connect("clicked", func() {
dialog := gtk.MessageDialogNew(
win,
gtk.DIALOG_MODAL,
gtk.MESSAGE_INFO,
gtk.BUTTONS_OK,
"按钮被点击了!",
)
dialog.Run()
dialog.Destroy()
})
// 将按钮添加到窗口
win.Add(btn)
// 显示所有控件
win.ShowAll()
// 进入 GTK 主循环
gtk.Main()
}
常用组件示例
1. 布局容器
// 创建垂直布局
box, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 6)
// 创建水平布局
hbox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 6)
// 创建网格布局
grid, _ := gtk.GridNew()
grid.SetRowSpacing(6)
grid.SetColumnSpacing(6)
2. 输入控件
// 创建文本框
entry, _ := gtk.EntryNew()
entry.SetPlaceholderText("请输入内容")
// 创建多行文本框
textView, _ := gtk.TextViewNew()
buffer, _ := textView.GetBuffer()
buffer.SetText("多行文本内容")
// 创建复选框
check, _ := gtk.CheckButtonNewWithLabel("选项")
check.SetActive(true) // 设置为选中状态
3. 列表控件
// 创建列表存储
listStore, _ := gtk.ListStoreNew(glib.TYPE_STRING, glib.TYPE_INT)
// 添加数据
iter := listStore.Append()
listStore.Set(iter, []int{0, 1}, []interface{}{"项目1", 100})
// 创建树视图
treeView, _ := gtk.TreeViewNewWithModel(listStore)
// 添加列
renderer, _ := gtk.CellRendererTextNew()
col1, _ := gtk.TreeViewColumnNewWithAttribute("名称", renderer, "text", 0)
col2, _ := gtk.TreeViewColumnNewWithAttribute("值", renderer, "text", 1)
treeView.AppendColumn(col1)
treeView.AppendColumn(col2)
信号处理
gotk3 使用 Connect 方法连接信号:
button.Connect("clicked", func() {
fmt.Println("按钮被点击")
})
entry.Connect("changed", func() {
text, _ := entry.GetText()
fmt.Println("输入内容:", text)
})
window.Connect("key-press-event", func(win *gtk.Window, ev *gdk.Event) {
keyEvent := &gdk.EventKey{ev}
if keyEvent.KeyVal() == gdk.KEY_Escape {
win.Close()
}
})
完整应用示例
package main
import (
"fmt"
"log"
"github.com/gotk3/gotk3/gtk"
)
func main() {
gtk.Init(nil)
// 创建主窗口
win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
if err != nil {
log.Fatal("无法创建窗口:", err)
}
win.SetTitle("GTK3 完整示例")
win.SetDefaultSize(400, 300)
win.Connect("destroy", gtk.MainQuit)
// 创建垂直布局
vbox, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 6)
vbox.SetMarginTop(12)
vbox.SetMarginBottom(12)
vbox.SetMarginStart(12)
vbox.SetMarginEnd(12)
// 添加标签
label, _ := gtk.LabelNew("欢迎使用 GTK3 Go 绑定")
vbox.Add(label)
// 添加输入框
entry, _ := gtk.EntryNew()
entry.SetPlaceholderText("输入内容...")
vbox.Add(entry)
// 添加按钮
btn, _ := gtk.ButtonNewWithLabel("提交")
btn.Connect("clicked", func() {
text, _ := entry.GetText()
label.SetText("你输入了: " + text)
})
vbox.Add(btn)
// 添加复选框
check, _ := gtk.CheckButtonNewWithLabel("启用高级选项")
vbox.Add(check)
// 将布局添加到窗口
win.Add(vbox)
// 显示所有控件
win.ShowAll()
// 进入主循环
gtk.Main()
}
注意事项
- GTK 操作必须在主线程执行
- 所有 GTK 调用应该在
gtk.Init()
之后 - 使用
gtk.Main()
启动主循环 - 内存管理由 GTK 自动处理,通常不需要手动释放资源
gotk3 提供了完整的 GTK3 功能绑定,可以创建复杂的图形界面应用程序。更多高级功能可以参考官方文档和示例代码。