programming/go
glademodified | 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}