在這節我將介紹GtkBuilder,其使我們可以從一個描述界面的xml文件構建UI。而這個文件我們可以使用Glade生成,這會極大的方便我們編輯用戶界面。這節我們會使用到這么一個XML文件,名字為Builder.ui
(可以在本文后面看到,請創建並放在項目下)。習慣上,我們使用.ui
作為擴展名。
示例:
package main
import (
"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)
app.Connect("activate", func() {
onActivate(app)
})
app.Run(os.Args)
}
//-- 在開始我們還是使用我們熟悉的代碼
func onActivate(application *gtk.Application) {
if builder, err := gtk.BuilderNewFromFile("builder.ui"); err != nil { //從文件中創建Builder
log.Fatal(err)
} else if winObj, err := builder.GetObject("window"); err != nil { //從文件中讀取window對象,其實際上是Gobject
log.Fatal(err)
} else {
window := winObj.(*gtk.Window) //由於winObj是Gobject,所以我們使用類型斷言得到Gtk.Window對象
application.AddWindow(window) //記得將window加入我們的application中
window.ShowAll()
}
}
Builder.ui的內容:
<interface>
<object id="window" class="GtkWindow">
<property name="visible">True</property>
<property name="title">Grid</property>
<property name="border-width">10</property>
<child>
<object id="grid" class="GtkGrid">
<property name="visible">True</property>
<child>
<object id="button1" class="GtkButton">
<property name="visible">True</property>
<property name="label">Button 1</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object id="button2" class="GtkButton">
<property name="visible">True</property>
<property name="label">Button 2</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object id="quit" class="GtkButton">
<property name="visible">True</property>
<property name="label">Quit</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
<property name="width">2</property>
</packing>
</child>
</object>
<packing>
</packing>
</child>
</object>
</interface>
本作品采用知識共享署名-非商業性使用-禁止演繹 4.0 國際許可協議進行許可。轉載請注明出處!