go-gtk3开发之标签
案例说明
添加标签组件,并设置或获取标签内容。
demo.go
package main
import (
"fmt"
"github.com/gotk3/gotk3/glib"
"github.com/gotk3/gotk3/gtk"
"log"
"os"
)
func main() {
const appId = "com.nayoso.example"
app, _ := gtk.ApplicationNew(appId, glib.APPLICATION_FLAGS_NONE)
_, err := app.Connect("activate", func() {
createWindow(app)
})
if err != nil {
log.Fatal(err)
}
app.Run(os.Args)
}
func createWindow(application *gtk.Application) {
// 从文件中创建Builder
builder, err := gtk.BuilderNewFromFile("6_标签/builder.ui")
if err != nil {
log.Fatal(err)
}
// 获取window窗口
winObj, _ := builder.GetObject("window1")
window := winObj.(*gtk.Window)
application.AddWindow(window)
// window 窗口设置
window.SetSizeRequest(300, 240) //设置窗口大小
window.SetTitle("hello go") //设置标题
window.SetResizable(false) //设置不可伸缩
window.SetPosition(gtk.WIN_POS_CENTER) //设置居中显示
err = window.SetIconFromFile("images/app.ico") //设置icon
if err != nil {
log.Fatal(err)
}
/*
// 这是错误的,不用再次添加组件,直接用即可
// 获取布局
fixedObj, _ := builder.GetObject("fixed1")
fixed := fixedObj.(*gtk.Fixed)
window.Add(fixed)
*/
// 获取标签
labelObj1, _ := builder.GetObject("label1")
labelObj2, _ := builder.GetObject("label2")
label1 := labelObj1.(*gtk.Label)
label2 := labelObj2.(*gtk.Label)
//fixed.Add(label1)
//fixed.Add(label2)
//获取label内容
labelText1, _ := label1.GetText()
fmt.Println("label1 = ", labelText1)
//设置内容
label1.SetText("你大爷")
label2.SetText("^_^")
// 设置字体大小
label1.SetSizeRequest(100, 100)
// 显示所有界面
window.ShowAll()
}
builder.ui
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkFixed" id="fixed1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label1">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="x">41</property>
<property name="y">88</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="x">250</property>
<property name="y">127</property>
</packing>
</child>
</object>
</child>
</object>
</interface>