很多Python开发者写惯了脚本和后端接口,面对桌面GUI容易觉得无从下手。实际上,借助PySide6,只要掌握基本Python语法,就能快速做出Windows、Mac、Linux都能运行的跨平台桌面软件。下面从空白窗口开始,逐步加入按钮、事件绑定、布局管理,最后说明打包方式与适用场景。
一、PySide6与Qt的关系
PySide6是Qt官方提供的Python绑定库。Qt本身是成熟的C++图形界面框架,PySide6把Qt的能力封装给Python调用。它常被拿来和PyQt5比较,关键区别是PySide6采用LGPL协议,商用项目不需要开源代码,没有版权顾虑。版本对应关系是:Qt6对应PySide6,Qt5对应PySide2;新项目直接选PySide6即可。
二、环境安装
准备好Python环境后,用一行pip命令安装:
安装完成后就可以写第一个窗口程序。
三、第一个程序:空白窗口
- from PySide6.QtWidgets import QApplication, QWidget
- import sys
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- window = QWidget()
- window.setWindowTitle("我的第一个PySide6窗口")
- window.resize(400, 250)
- window.show()
- sys.exit(app.exec())
复制代码
运行后会弹出一个桌面窗口。核心对象可以这样理解:QApplication是GUI程序必须有的应用实例,管理整个程序生命周期;QWidget是所有控件和窗口的基类,简单窗口直接用它;app.exec()开启Qt事件循环,监听鼠标点击、窗口拖动等交互事件,程序不会直接退出。
四、添加按钮与信号槽
只有空白窗口没有实际功能,下面加入一个按钮,点击后弹出提示:
- from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
- import sys
- def show_msg():
- QMessageBox.information(window, "提示", "按钮被点击了!")
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- window = QWidget()
- window.setWindowTitle("按钮测试")
- window.resize(400, 250)
- btn = QPushButton("点我", window)
- btn.resize(120, 40)
- btn.move(140, 100)
- btn.clicked.connect(show_msg)
- window.show()
- sys.exit(app.exec())
复制代码
这里体现了Qt最核心的信号与槽机制:控件发生某个事件时发出信号,比如按钮点击发出clicked信号,绑定的函数作为槽自动执行。不用手动写循环监听,Qt内部会自动处理。
五、布局管理:告别手动move定位
上面的按钮用move()写死坐标,窗口缩放时控件不会跟着适配。实际开发中优先使用布局:
- from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
- import sys
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- window = QWidget()
- window.setWindowTitle("垂直布局")
- window.resize(300, 200)
- layout = QVBoxLayout(window)
- layout.addWidget(QPushButton("按钮1"))
- layout.addWidget(QPushButton("按钮2"))
- layout.addWidget(QPushButton("按钮3"))
- window.show()
- sys.exit(app.exec())
复制代码
QVBoxLayout是垂直布局,控件从上往下排列;QHBoxLayout是水平布局;QGridLayout是网格布局,适合表单类界面。使用布局后,拖动窗口改变大小,控件会自动跟着调整位置,不需要手动计算坐标。
六、纯代码与Qt Designer怎么选
纯代码写界面适合小型工具、简单面板,代码可控,方便版本管理,前面的例子都是这种方式。Qt Designer拖拽UI则是可视化拖控件,保存.ui文件,再用PySide6加载,适合界面复杂、控件较多的项目,可以减少手写布局的工作量。
入门阶段建议先手写代码,理解控件和信号槽,熟悉之后再使用Qt Designer提速。
七、适用场景与局限
适合的场景包括:写自用小工具、本地批量处理GUI,比如图片处理、文件扫描、数据导出工具;内部办公桌面软件;需要跨平台又不想学习C++开发桌面端。
不太适合的场景包括:超复杂大型商业客户端,Qt本身可以胜任,但Python打包后体积偏大;追求极致启动速度、极小安装包的场景。
八、打包分发
写好程序后,可以用pyinstaller打包成exe,发给其他人直接打开,不需要对方安装Python:
- pyinstaller -F -w main.py
复制代码
其中-F表示打包成单个exe文件,-w表示运行时不弹出黑色控制台窗口。需要注意的是,打包PySide6程序体积会比较大,这是Qt框架本身带来的。
九、小结
PySide6降低了桌面GUI的开发门槛,Python开发者可以不用切换语言,快速把脚本封装成带可视化界面的桌面工具。核心就是三件事:创建控件、布局排版、信号槽绑定交互。入门之后,可以继续学习输入框、表格、树形控件,或者结合多线程解决GUI卡顿问题;耗时任务不能直接在主线程跑,否则会卡死窗口。 |