目录
一 安装PyQt5以及PyQt5-tools
二 配置外部开发工具
三 使用Qt Designer设计界面
四 使用PyUIC将ui文件转换为py文件
五 CU分离实现逻辑代码
一 安装PyQt5以及PyQt5-tools
之前做的一些Python脚本、软件都是基于 Tkinter 实现的,其中界面的设计布局是很头疼的事情,都得自己手动敲。了解到 PyQt5 + Qt Designer 可以通过可视化界面,拖拽控件的形式简单完成界面的设计,颇为心动,遂尝试使用。
【1】安装PyQt5
通过命令行管道输入命令 pip install PyQt5。或者在Pycharm中搜索安装:
【2】安装PyQt5-tools
通过命令行管道输入命令 pip install PyQt5-tools。或者在Pycharm中搜索安装:
二 配置外部开发工具
进入 File→Settings→Tools→External Tools,点击+号,新建两个外部工具:QTDesigner 和 PyUIC:
【1】配置QTDesigner:
其中:
Name:QTDesigner
Program:C:\Python38\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
注意:该路径为Python安装路径Lib\site-packages\qt5_applications文件夹里Working dirctory:C:\Python38\Lib\site-packages\qt5_applications\Qt\bin
注意:$FileDir$ 亦可
【2】配置PyUIC:
其中:
Name:PyUIC
Program:C:\Python38\Scripts\pyuic5.exe
注意:该路径为你Python安装路径下Scripts文件夹里Arguments:$FileName$ -o $FileNameWithoutExtension$.py
Working dirctory:$FileDir$
三 使用Qt Designer设计界面
配置完成之后,点击Tools→External Tools→QTDesinger,进入设计界面:
在New Form对话框里选择Widget模板,然后点击创建:
然后就会出现Qt Designer主界面,向Form中分别拖入一个“Push Button”和一个“Text Edit”,如下图:
指定点击事件及其响应函数。在工具栏点击对象图标:
然后光标移动到“PushButton”按钮上,鼠标左键 点击 “PushButton”按钮 不要松开,拖动光标 到 按钮旁边的任一位置后 再松开鼠标左键,会出现一个类似接地的图标:
随后就出现了如下界面,在对话框左侧选中“clicked()”,右侧点击“Edit”,配置连接如下:
新增一个名为 pushButton_click() 的槽:
保存并退出 QTDesinger。
四 使用PyUIC将ui文件转换为py文件
Python并不能识别Qt Designer生成的.ui文件,需要使用外部工具PyUIC将其转换为.py文件:
生成结束之后,同级目录下会出现一个同名的.py文件,这个文件就可以直接使用了:
五 CU分离实现逻辑代码
运用CU分离的思想,将界面与业务逻辑分开实现。方法是新建一个.py文件程序(我这边直接用自动生成的main.py),在里边创建一个子类(My_Ui_Form)继承testUI.py中的Ui_Form。
优点1:实现逻辑清晰;
优点2:后续如果界面或者逻辑需要变更,好维护;
代码如下:
python">"""
界面与业务逻辑分离实现:新建一个.py文件程序,在里边创建一个子类(My_Ui_Form)继承testUI.py中的Ui_Form
优点1:实现逻辑清晰;
优点2:后续如果界面或者逻辑需要变更,好维护;
"""
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QMainWindow
from testUI import Ui_Formclass My_Ui_Form(QWidget, Ui_Form):def __init__(self):super(My_Ui_Form, self).__init__()self.setupUi(self)def pushButton_click(self):self.textEdit.setText("你点击了按钮")if __name__ == '__main__':app = QApplication(sys.argv)win = My_Ui_Form()win.show()sys.exit(app.exec_())
运行程序,点击界面中的按钮,可以在文本框内显示文字,结果如下: