Welcome to Pygubu!
Pygubu
is a RAD tool to enable quick and easy development of user interfaces for the Python's tkinter
module.
The user interfaces designed are saved as XML files, and, by using the pygubu builder, these can be loaded by applications dynamically as needed.
Pygubu is inspired by Glade.
Installation
Pygubu works with Python 2.7 or Python 3
pip install pygubu
Usage
Since version 0.10 the project was splitted in two main modules:
- The pygubu core (this project), that load and build user interfaces defined in xml.
- The interface editor pygubu-designer, that helps you create the xml definition graphically
Start creating your tkinter application xml UI definition using the pygubu-designer editor.
The following is a UI definition example called helloworld.ui:
<?xml version='1.0' encoding='utf-8'?>
<interface>
<object class="tk.Toplevel" id="mainwindow">
<property name="height">200</property>
<property name="resizable">both</property>
<property name="title" translatable="yes">Hello World App</property>
<property name="width">200</property>
<child>
<object class="ttk.Frame" id="mainframe">
<property name="height">200</property>
<property name="padding">20</property>
<property name="width">200</property>
<layout>
<property name="column">0</property>
<property name="propagate">True</property>
<property name="row">0</property>
<property name="sticky">nsew</property>
<rows>
<row id="0">
<property name="weight">1</property>
</row>
</rows>
<columns>
<column id="0">
<property name="weight">1</property>
</column>
</columns>
</layout>
<child>
<object class="ttk.Label" id="label1">
<property name="anchor">center</property>
<property name="font">Helvetica 26</property>
<property name="foreground">#0000b8</property>
<property name="text" translatable="yes">Hello World !</property>
<layout>
<property name="column">0</property>
<property name="propagate">True</property>
<property name="row">0</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</interface>
Then, you should create your application script as shown below (helloworld.py):
# helloworld.py
import tkinter as tk
import pygubu
class HelloWorldApp:
def __init__(self):
#1: Create a builder
self.builder = builder = pygubu.Builder()
#2: Load an ui file
builder.add_from_file('helloworld.ui')
#3: Create the mainwindow
self.mainwindow = builder.get_object('mainwindow')
def run(self):
self.mainwindow.mainloop()
if __name__ == '__main__':
app = HelloWorldApp()
app.run()
Note that instead of helloworld.ui
, you should insert the filename (or full path) of your UI definition:
builder.add_from_file('your_ui_definition.ui')
Note also that instead of 'mainwindow', you should have the name of your main_widget (the parent of all widgets) in the following line:
self.mainwindow = builder.get_object('_your_main_widget_')
Documentation
Visit the pygubu wiki for more documentation.
The following are some good tkinter (and tk) references:
- TkDocs
- Graphical User Interfaces with Tk
- Tkinter 8.5 reference: a GUI for Python
- An Introduction to Tkinter
- Tcl/Tk 8.5 Manual
You can also see the examples directory or watch this introductory video tutorial.
History
See the list of changes here.