Pygubu es una herramienta RAD que permite desarrollar interfaces de usuario rápida y fácilmente para el modulo tkinter de Python.
La interfaces diseñadas se guardan como archivos XML, y usando el constructor de pygubu estos pueden ser cargados dinámicamente por las aplicaciones a medida que lo necesiten.
Pygubu esta inspirado por Glade (el diseñador de interfaces de gtk).
La última versión de pygubu requiere Python >= 3.8
Puedes instalar pygubu-designer usando:
pip install pygubu-designer
Ejecuta el diseñador ejecutando en una consola los siguientes comandos, dependiendo del sistema operativo que uses.
pygubu-designer
c:\Python3\Scripts\pygubu-designer.exe
Donde 'c:\Python3' es tu directorio de instalación de python.
Ahora, puedes comenzar a crear tu aplicación tkinter usando los widgets que
encontrarás en el panel superior denominado Paleta de widgets
.
Luego de finalizar la creación de tu interface de usuario, grábala en un
archivo.ui
con la opción Archivo > Guardar
del menu principal.
El siguiente es un ejemplo de interfaz de usuario denominado holamundo.ui creado usando pygubu-designer:
<?xml version='1.0' encoding='utf-8'?>
<interface version="1.2">
<object class="tk.Toplevel" id="mainwindow">
<property name="height">200</property>
<property name="resizable">both</property>
<property name="title" translatable="yes">Hola Mundo 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 manager="pack">
<property name="expand">true</property>
<property name="side">top</property>
</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">Hola Mundo !</property>
<layout manager="pack">
<property name="side">top</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</interface>
Luego, crea tu aplicación como se muestra a continuación (holamundo.py):
# helloworld.py
import pathlib
import pygubu
PROJECT_PATH = pathlib.Path(__file__).parent
PROJECT_UI = PROJECT_PATH / "holamundo.ui"
class HolamundoApp:
def __init__(self, master=None):
# 1: Crear un builder y configurar el path de recursos (si usas imágenes)
self.builder = builder = pygubu.Builder()
builder.add_resource_path(PROJECT_PATH)
# 2: Cargar un archivo UI
builder.add_from_file(PROJECT_UI)
# 3: Crear la ventana principal
self.mainwindow = builder.get_object("mainwindow", master)
# 4: Conectar callbacks
builder.connect_callbacks(self)
def run(self):
self.mainwindow.mainloop()
if __name__ == "__main__":
app = HolamundoApp()
app.run()
Ten en cuenta que en lugar de holamundo.ui
en la línea:
builder.add_from_file('holamundo.ui')
Debes insertar el nombre de archivo (o path) de la interfaz de usuario que acabas de grabar.
Ten en cuenta además que en lugar de 'mainwindow'
en la línea:
self.mainwindow = builder.get_object('mainwindow')
Debes tener el nombre del widget principal (el padre de todos los widgets), en caso contrario obtendras un error similar al siguiente::
Exception: Widget not defined.
Mira este issue para mayor información.
Visita la wiki para mas documentación.
Los siguientes links son buenas referencias (en inglés) de tkinter (y tk):
- TkDocs
- Graphical User Interfaces with Tk
- Tkinter 8.5 reference: a GUI for Python
- An Introduction to Tkinter (archive)
- Tcl/Tk 8.5 Manual
Tambien puedes buscar en el directorio de ejemplos o mirar este ejemplo de 'Hola mundo' en vídeo
Mira la lista de cambios aquí