软硬件环境
- windows 10 64bit
- Miniconda with python 3.7.1
- PyQt5
- PyCharm
前言
前面的内容我们介绍了利用QtDesigner
来设计界面,再通过批处理脚本pyuic5.bat
将ui
文件转换成python
源文件。不过由于要响应事件操作,往往会将相应的槽函数写在ui
的py
文件里(前面的示例就是这样),这样,界面和逻辑的开发代码就混合在一起了,每一次的ui
的更新都会伴随着转换后py
文件的修改,想想就知道很不合理了。对于多人协作的项目,这样的效率肯定是低下的。有鉴于此,本文就来介绍如何将这二者进行剥离。
实例讲解
设计ui
首先用QtDesigner
做一个简单的界面mainwindow.ui
, 在菜单栏上加入几个QAction
ui转换成py
利用pyuic5.bat
进行转换
pyuic5.bat -o ui_mainwindow.py mainwindow.ui
剥离ui和逻辑
新建一个mainwindow.py
文件,创建MainWindow
类
from PyQt5.QtWidgets import QMainWindow
from ui_mainwindow import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.action_exit.triggered.connect(self.onExitTriggered)
self.action_copy.triggered.connect(self.onCopyTriggered)
self.action_paste.triggered.connect(self.onPasteTriggered)
self.action_cut.triggered.connect(self.onCutTriggered)
在这里去绑定相应的signal
和slot
,实现具体的业务逻辑,代码结构也清晰多了。这样,以后如果再遇到ui
更新了,我们只需要将更新后的ui
文件替换,再转换成py
就可以了,实现了ui
和逻辑的分离。
main函数中调用
在main
中实例化MainWindow
,调用show
方法显示
import sys
from PyQt5.QtWidgets import QApplication
from mainwindow import MainWindow
if __name__ == "__main__":
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
备注
为了便于保存记录,在Github
创建了一个工程,地址是: https://github.com/xugaoxiang/learningPyQt5,后续会把所有的代码、文档以及博文链接都放在上面。