Pygubu
là một phần mềm RAD tạo ra một môi trường phát triển giao diện người dùng cho module Tkinter
từ Python nhanh và dễ dàng.
Các giao diện được tạo ra sẽ được lưu lại trong tệp XML, và với pygubu builder thì chúng có thể được nạp vào các ứng dụng một cách linh hoạt nếu cần thiết.
Pygubu lấy cảm hứng từ Glade.
Phiên bản Pygubu hiện tại yêu cầu Python 3.8 trở lên.
Cài đặt bằng:
$ pip install pygubu-designer
Trên Arch Linux với repository AUR
$ yay -S pygubu-designer
Mở Pygubu tùy thuộc vào hệ thống của bạn:
Nếu Python được đặt vào $PATH/%PATH%, hãy thử:
$ pygubu-designer
Nếu không được:
$ <vị trí Python>/Scripts/pygubu-designer
Bây giờ bạn có thể tạo ứng dụng Tkinter cho mình với các widget ở panel phía trên được gọi là Widget Palette
.
Sau khi làm xong việc của mình, lưu lại công việc của bạn vào một tệp .ui
(File > Save
).
Dưới đây là một ví dụ:
<?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">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 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">Hello World !</property>
<layout manager="pack">
<property name="side">top</property>
</layout>
</object>
</child>
</object>
</child>
</object>
</interface>
Nạp giao diện từ đoạn code trên với Python:
# helloworld.py
import pathlib
import tkinter as tk
import tkinter.ttk as ttk
import pygubu
PROJECT_PATH = pathlib.Path(__file__).parent # Thư mục nơi file này được đặt
PROJECT_UI = PROJECT_PATH / "helloworld.ui" # Thay đổi "helloworld.ui" với tên file của bạn
class HelloworldApp:
def __init__(self, master=None):
# 1: Tạo một builder và bảo nó nơi nó có thể tìm ảnh nếu có
self.builder = builder = pygubu.Builder()
builder.add_resource_path(PROJECT_PATH)
# 2: Load một file .ui
builder.add_from_file(PROJECT_UI)
# 3: Gọi object được đặt id là "mainwindow" - ở đây là một tk.TopLevel
# Thường chúng ta sẽ gọi widget trên cùng - thường là một cửa sổ hoặc dialog,
# sau đó gọi các widget con.
self.mainwindow = builder.get_object('mainwindow', master)
# 4: Cho builder biết các hàm sẽ thực hiện khi có tương tác của người dùng
builder.connect_callbacks(self)
def run(self):
self.mainwindow.mainloop()
if __name__ == '__main__':
app = HelloworldApp()
app.run()
Nếu trong file không có một widget nào có id đang được pygubu tìm kiếm, sẽ có lỗi:
Exception: Widget not defined.
Có thể xem trang này để hiểu hơn về vấn đề này.
Trang wiki của Pygubu: https://github.com/alejandroautalan/pygubu-designer/wiki.
Đây là một số tài liệu tốt về Tkinter và 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
Ngoài ra bạn có thể xem mẫu ở thư mục examples hoặc xem video này.
Ở đây: HISTORY.md.