Pygubu 是一个用于快速开发 Python Tkinter GUI 应用程序的工具,它允许开发者通过 XML 文件 定义用户界面布局,并动态加载这些 XML 文件生成界面。这种方式可以将界面设计与业务逻辑分离,提升开发效率和可维护性。
核心功能
可视化界面设计
通过 XML 文件描述 UI 结构(按钮、输入框、窗口等),无需硬编码界面元素。
支持 Tkinter 的大部分控件(如 Button, Entry, Label, Frame 等)。
动态加载 UI
使用 pygubu.Builder 类加载 XML 文件,自动生成对应的 Tkinter 组件。
可绑定事件回调函数(如按钮点击事件)。
跨平台兼容性
基于 Tkinter,支持 Windows、macOS 和 Linux。
简化代码逻辑
避免冗长的 Tkinter 创建代码,专注于业务逻辑实现。
安装 Pygubu
pip install pygubu
如果需要图形化设计工具(可选):
pip install pygubu-designer
使用示例
1. 定义 UI(XML 文件)
创建一个名为 example.ui 的 XML 文件,定义一个简单窗口:<?xml version="1.0" encoding="UTF-8"?>
<interface>
<object class="tk.Tk" id="mainwindow">
<property name="title">Pygubu 示例</property>
<child>
<object class="ttk.Frame" id="mainframe">
<child>
<object class="ttk.Button" id="mybutton">
<property name="text">点击我</property>
<property name="command">on_button_click</property>
</object>
</child>
</object>
</child>
</object>
</interface>2. 编写 Python 代码
import pygubu
class MyApp:
def __init__(self):
# 创建 Builder 并加载 UI 文件
self.builder = pygubu.Builder()
self.builder.add_from_file('example.ui')
# 获取主窗口
self.mainwindow = self.builder.get_object('mainwindow')
# 绑定事件
self.builder.connect_callbacks(self)
def on_button_click(self):
print("按钮被点击了!")
def run(self):
self.mainwindow.mainloop()
if __name__ == '__main__':
app = MyApp()
app.run()加载 XML 并绑定事件:运行后会显示一个窗口,点击按钮会触发 on_button_click 函数。高级功能
自定义控件 :支持继承 Tkinter 控件并注册到 Builder 中。
主题支持 :通过 ttkthemes 等库应用现代样式。
国际化 :XML 中支持变量替换,方便多语言界面。
图形化设计工具(Pygubu Designer)
安装 pygubu-designer 后,可以通过可视化工具拖拽控件生成 XML 文件:运行设计器:
pygubu-designer
拖拽控件到画布,设置属性,保存为 .ui 文件。
资源链接
官方文档:https://pygubu.readthedocs.io
GitHub 仓库:https://github.com/alejandroautalan/pygubu
示例项目:https://github.com/alejandroautalan/pygubu/tree/master/examples适用场景
快速原型开发(如小型工具、脚本界面)。
需要分离界面与逻辑的 Tkinter 项目。
教学演示:展示 XML 配置驱动的 GUI 设计模式。
如果你有具体问题(如 XML 语法、事件绑定、样式调整),可以进一步提问!网友回复
如何写ai提示词让大模型根据主题生成视频脚本json,然后让Hyperframe渲染出mp4视频?
有哪些字体使用等宽编程代码展示?
如果让演唱会歌迷的上万手机屏幕和闪光灯一起被现场中控控制闪烁?
Midjourney为啥进军医疗领域了?
python如何跟踪足球比赛指定球员全场运动标注打聚光灯合成
如何将linux服务器的文件目录映射到windows电脑磁盘?
Docling 与 MarkItDown 两个库有啥不同?
豆包收费后国产其他ai软件也会跟进收费吗?
JPEG 与 HEIF图片格式区别?
centos7版本太旧无法安装python3.11,如何在docker中运行python3.11?


