Win10 搭建Python3 + PyQt5 + PyCharm 开发环境 超详细图解 无坑(三)
目录
PyCharm+PyUic快捷菜单工具配置(高级)---分离界面和逻辑
前言
前面的内容我们介绍了利用PyCharm+QtDesigner来设计界面,再通过pyuic5将.ui文件转换成.py源文件。由于要响应事件操作,通常会将相应的槽函数写在ui对应的.py文件里。如此一来,界面和逻辑开发就混合在一起了。每一次ui更新都需要修改.py文件,软件开发效率低下。本文会介绍如何配置PyCharm+PyUic、分离界面和逻辑以及实例代码演示。
目的
后续ui更新,只要将.ui文件替换,然后转换成_ui.py,逻辑部分就不用动,从而实现界面设计与逻辑开发分离。
关于信号和槽的解释可以参考我的另外一篇文章--《C++ Qt与PyQt5 信号与槽 对比说明》
PyCharm+PyUic快捷菜单工具配置(高级)---分离界面和逻辑
把Qt的UI文件转换成.py文件的工具。
Description: convert .ui to .py
Program: C:\Python\Scripts\pyuic5.exe(在自己Python安装目录下找一下)
Arguments:
原来的参数: $FileName$ -o $FileNameWithoutExtension$.py
更新后的参数: $FileName$ -o $FileNameWithoutExtension$_ui.py
Working directory: $FileDir$(可以拷贝我的设定,或者点击按钮“Insert macro…” 选择合适的macros)
配图说明请参考《Win10 搭建Python3 + PyQt5 + PyCharm 开发环境 (二)》之“PyCharm+PyUic快捷菜单工具配置”
代码实例
- 先用QtDesigner设计一个ui,采用默认的名字“MainWindow”。
- 添加一个菜单File,然后在菜单File下面添加几个选项,如下表,修改它们对应的objectName(一定要改,否则后面使用的时候会报错)
Action
objectName
Exit
exitAction
Copy
copyAction
Paste
pasteAction
Cut
cutAction
- 然后用我们配置好的pyuic tool来生成mainwindow_ui.py(自己在cmd控制台输指令也可以“pyuic5 mainwindow.ui -o mainwindow_ui.py ”)
- 在项目工程下新增一个mainwindow.py。注意:不带_ui,这个是我们逻辑处理的地方,主要是槽函数。然后将如下代码复制进去。
#! /usr/bin/env python # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication,QMainWindow,QMessageBox from mainwindow_ui import * # module mainwindow_ui.py class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setupUi(self) self.exitAction.triggered.connect(self.onExitTriggered) self.copyAction.triggered.connect(self.onCopyTriggered) self.pasteAction.triggered.connect(self.onPasteTriggered) self.cutAction.triggered.connect(self.onCutTriggered) def onExitTriggered(self): QMessageBox.information(self, "Information", "Exit action triggered") pass def onCopyTriggered(self): QMessageBox.information(self, "Information", "Copy action triggered") pass def onPasteTriggered(self): QMessageBox.information(self, "Information", "Paste action triggered") pass def onCutTriggered(self): QMessageBox.information(self, "Information", "Cut action triggered") pass if __name__ == "__main__": app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_())
- 最后,右击执行Run