Skip to content

Instantly share code, notes, and snippets.

@StanGenchev
Created November 15, 2020 18:24
Show Gist options
  • Save StanGenchev/449c26f8df755989a1cfdd98ed516e3d to your computer and use it in GitHub Desktop.
Save StanGenchev/449c26f8df755989a1cfdd98ed516e3d to your computer and use it in GitHub Desktop.
Python GTK 3 example using Glade and Gtk.Builder
#!/usr/bin/env python3
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
UI_FILE = "example.ui"
class Example:
def __init__(self):
self.builder = Gtk.Builder()
self.builder.add_from_file(UI_FILE)
self.builder.connect_signals(self)
self.window = self.builder.get_object("window")
self.window_label = self.builder.get_object("window_label")
self.window.show_all()
def button_clicked(self, button):
self.window_label.set_text("You clicked!")
def about_clicked(self, button):
self.window_label.set_text("This is just an example.")
def quit_clicked(self, button):
self.on_window_destroy(self.window)
def on_window_destroy(self, window):
Gtk.main_quit()
def main():
app = Example()
Gtk.main()
if __name__ == "__main__":
main()
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.36.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkPopover" id="menu_popover">
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="menu_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkModelButton" id="menu_about">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="text" translatable="yes">About</property>
<signal name="clicked" handler="about_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSeparator" id="separator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkModelButton" id="menu_quit">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="text" translatable="yes">Quit</property>
<signal name="clicked" handler="quit_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="window">
<property name="can_focus">False</property>
<property name="default_width">440</property>
<property name="default_height">250</property>
<signal name="destroy" handler="on_window_destroy" swapped="no"/>
<child>
<object class="GtkLabel" id="window_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar" id="header">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="title" translatable="yes">Example</property>
<property name="subtitle" translatable="yes">Python GObject Glade</property>
<property name="show_close_button">True</property>
<child>
<object class="GtkButton" id="button">
<property name="label" translatable="yes">Click</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="button_clicked" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuButton" id="menu">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="popover">menu_popover</property>
<child>
<object class="GtkImage" id="menu_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">open-menu-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment