glade
Tue 23 September 2025
Github
https://github.com/GNOME/glade
https://infrastructure.pages.gitlab.gnome.org/glade-web/ https://help.gnome.org/users/glade/stable/
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow" id="window">
<property name="width-request">400</property>
<property name="height-request">200</property>
<property name="can-focus">False</property>
<property name="title" translatable="yes">demo</property>
<child>
<object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkButton" id="button">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="combobox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
<property name="active">0</property>
<property name="active-id">1</property>
<items>
<item id="1" translatable="yes">item1</item>
<item id="2" translatable="yes">item2</item>
<item id="3" translatable="yes">item3</item>
<item id="4" translatable="yes">item4</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
main.go
package main
import (
"github.com/gotk3/gotk3/gtk"
"log"
)
func main() {
gtk.Init(nil)
builder, err := gtk.BuilderNewFromFile("ui/demo.glade")
if err != nil {
log.Fatal("Error loading Glade file:", err)
}
buildButton(builder)
buildCombobox(builder)
buildEntry(builder)
window := buildWindow(builder)
window.ShowAll()
gtk.Main()
}
func buildWindow(builder *gtk.Builder) *gtk.Window {
obj, err := builder.GetObject("window")
if err != nil {
log.Fatal("Error getting window object:", err)
}
window.SetPosition(gtk.WIN_POS_CENTER)
window, ok := obj.(*gtk.Window)
if !ok {
log.Fatal("Error converting to gtk.Window")
}
window.Connect("destroy", func() {
log.Println("Close Window")
gtk.MainQuit()
})
return window
}
func buildButton(builder *gtk.Builder) {
obj, err := builder.GetObject("button")
if err != nil {
log.Fatal("Error getting Button object:", err)
}
button, ok := obj.(*gtk.Button)
if !ok {
log.Fatal("Error converting to gtk.Button")
}
button.Connect("clicked", func() {
log.Println("Hello World")
})
}
func buildCombobox(builder *gtk.Builder) {
obj, err := builder.GetObject("combobox")
if err != nil {
log.Fatal("Error getting ComboBoxText object:", err)
}
combobox, ok := obj.(*gtk.ComboBoxText)
if !ok {
log.Fatal("Error converting to gtk.ComboBoxText")
}
combobox.Connect("changed", func() {
activeIndex := combobox.GetActive()
activeText := combobox.GetActiveText()
log.Println("ComboBoxText index item changed:", activeIndex, activeText)
})
}
func buildEntry(builder *gtk.Builder) {
obj, err := builder.GetObject("entry")
if err != nil {
log.Fatal("Error getting entry object:", err)
}
entry, ok := obj.(*gtk.Entry)
if !ok {
log.Fatal("Error converting to gtk.Entry")
}
entry.Connect("changed", func() {
text, err := entry.GetText()
if err != nil {
log.Fatal("Error getting text from entry:", err)
}
log.Println("Entry text changed:", text)
})
entry.Connect("activate", func() {
text, err := entry.GetText()
if err != nil {
log.Fatal("Error getting text from entry:", err)
}
log.Println("Entry text activated:", text)
})
}
例子 #go #go-gtk #glade
Category: 编程go