programming/go

glade
Edited: Saturday 28 June 2025

Github

https://github.com/GNOME/glade

https://infrastructure.pages.g…
https://help.gnome.org/users/g…

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!-- Generated with glade 3.40.0 -->
 3<interface>
 4  <requires lib="gtk+" version="3.24"/>
 5  <object class="GtkWindow" id="window">
 6    <property name="width-request">400</property>
 7    <property name="height-request">200</property>
 8    <property name="can-focus">False</property>
 9    <property name="title" translatable="yes">demo</property>
10    <child>
11      <object class="GtkBox" id="box">
12        <property name="visible">True</property>
13        <property name="can-focus">False</property>
14        <property name="orientation">vertical</property>
15        <child>
16          <object class="GtkButton" id="button">
17            <property name="label" translatable="yes">button</property>
18            <property name="visible">True</property>
19            <property name="can-focus">True</property>
20            <property name="receives-default">True</property>
21            <property name="margin-start">10</property>
22            <property name="margin-end">10</property>
23            <property name="margin-top">10</property>
24            <property name="margin-bottom">10</property>
25          </object>
26          <packing>
27            <property name="expand">False</property>
28            <property name="fill">True</property>
29            <property name="position">0</property>
30          </packing>
31        </child>
32        <child>
33          <object class="GtkComboBoxText" id="combobox">
34            <property name="visible">True</property>
35            <property name="can-focus">False</property>
36            <property name="margin-start">10</property>
37            <property name="margin-end">10</property>
38            <property name="margin-top">10</property>
39            <property name="margin-bottom">10</property>
40            <property name="active">0</property>
41            <property name="active-id">1</property>
42            <items>
43              <item id="1" translatable="yes">item1</item>
44              <item id="2" translatable="yes">item2</item>
45              <item id="3" translatable="yes">item3</item>
46              <item id="4" translatable="yes">item4</item>
47            </items>
48          </object>
49          <packing>
50            <property name="expand">False</property>
51            <property name="fill">True</property>
52            <property name="position">1</property>
53          </packing>
54        </child>
55        <child>
56          <object class="GtkEntry" id="entry">
57            <property name="visible">True</property>
58            <property name="can-focus">True</property>
59            <property name="margin-start">10</property>
60            <property name="margin-end">10</property>
61            <property name="margin-top">10</property>
62            <property name="margin-bottom">10</property>
63          </object>
64          <packing>
65            <property name="expand">False</property>
66            <property name="fill">True</property>
67            <property name="position">2</property>
68          </packing>
69        </child>
70      </object>
71    </child>
72  </object>
73</interface>

main.go

 1package main
 2
 3import (
 4	"github.com/gotk3/gotk3/gtk"
 5	"log"
 6)
 7
 8func main() {
 9	gtk.Init(nil)
10	builder, err := gtk.BuilderNewFromFile("ui/demo.glade")
11	if err != nil {
12		log.Fatal("Error loading Glade file:", err)
13	}
14
15	buildButton(builder)
16	buildCombobox(builder)
17	buildEntry(builder)
18	window := buildWindow(builder)
19
20	window.ShowAll()
21
22	gtk.Main()
23}
24
25func buildWindow(builder *gtk.Builder) *gtk.Window {
26	obj, err := builder.GetObject("window")
27	if err != nil {
28		log.Fatal("Error getting window object:", err)
29	}
30	window.SetPosition(gtk.WIN_POS_CENTER)
31	window, ok := obj.(*gtk.Window)
32	if !ok {
33		log.Fatal("Error converting to gtk.Window")
34	}
35	window.Connect("destroy", func() {
36		log.Println("Close Window")
37		gtk.MainQuit()
38	})
39	return window
40}
41
42func buildButton(builder *gtk.Builder) {
43	obj, err := builder.GetObject("button")
44	if err != nil {
45		log.Fatal("Error getting Button object:", err)
46	}
47	button, ok := obj.(*gtk.Button)
48	if !ok {
49		log.Fatal("Error converting to gtk.Button")
50	}
51	button.Connect("clicked", func() {
52		log.Println("Hello World")
53	})
54}
55
56func buildCombobox(builder *gtk.Builder) {
57	obj, err := builder.GetObject("combobox")
58	if err != nil {
59		log.Fatal("Error getting ComboBoxText object:", err)
60	}
61	combobox, ok := obj.(*gtk.ComboBoxText)
62	if !ok {
63		log.Fatal("Error converting to gtk.ComboBoxText")
64	}
65	combobox.Connect("changed", func() {
66		activeIndex := combobox.GetActive()
67		activeText := combobox.GetActiveText()
68		log.Println("ComboBoxText index item changed:", activeIndex, activeText)
69	})
70}
71
72func buildEntry(builder *gtk.Builder) {
73	obj, err := builder.GetObject("entry")
74	if err != nil {
75		log.Fatal("Error getting entry object:", err)
76	}
77	entry, ok := obj.(*gtk.Entry)
78	if !ok {
79		log.Fatal("Error converting to gtk.Entry")
80	}
81	entry.Connect("changed", func() {
82		text, err := entry.GetText()
83		if err != nil {
84			log.Fatal("Error getting text from entry:", err)
85		}
86		log.Println("Entry text changed:", text)
87	})
88	entry.Connect("activate", func() {
89		text, err := entry.GetText()
90		if err != nil {
91			log.Fatal("Error getting text from entry:", err)
92		}
93		log.Println("Entry text activated:", text)
94	})
95}

例子 go go-gtk glade

Backlinks

See Also