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


GOTK

Tue 23 September 2025

qt,优点:文档丰富能完美的跨平台,相对执行效率高。 缺点:杂七杂八的东西太多,导致开发平台环境太大,生成的可执行文件 …

Category: 编程go

Read More

GTK

Tue 23 September 2025

GTK(GIMP Toolkit)是一个广泛使用的跨平台图形用户界面开发工具包。它提供了丰富的控件和强大的功能,能够满足现代图形应用 …

Category: 编程go

Read More

gtk-examples

Tue 23 September 2025

https://github.com/gotk3/gotk3-examples/tree/master/gtk-examples

例子 #go #gotk #go-gtk #gtk

Category: 编程go

Read More

布局管理

Tue 23 September 2025

布局管理

GTK3提供了多种布局管理器,如GtkBox、GtkGrid等。

以下是一个使用GtkBox的示例:

package main

import (
    "github.com/gotk3/gotk3/gtk"
    "log"
)

func main() {
    gtk.Init(nil)

    window, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
    if err != nil {
        log.Fatal("Unable to create window:", err)
    }
    window.SetTitle("Complex Layout …

Category: 编程go

Read More
Page 1 of 1