Golang Gtk+3教程:GtkBuilder使用XML構建UI


在這節我將介紹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 國際許可協議進行許可。轉載請注明出處!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM