PyQt和Qt Designer符合MVC开发模式,做到显示和业务逻辑的分离,以下是PyQt的简单配置记录。
PyQt学习记录
S1:MVC开发模式
S1.1 MVC模式构成
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式,这种模式用于应用程序的分层开发。
- Model(模型) - 模型代表的是一个存取数据的对象。它也可以带有逻辑,在发生数据变化时更新控制器。
- View(视图) - 视图用来显示,代表模型包含的数据的可视化。
- Controller(控制器) - 控制器作用在模型和视图上,它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
S1.2 实现
例如创建一个名为 Student 对象的模型,StudentView 是一个把学生详细信息传输到控制台的视图类,StudentController 负责存储数据到 Student 对象中的控制器类,并会相应地更新视图 StudentView。
MVCPatternDemo,我们的演示类使用 StudentController 来演示 MVC 模式的用法。
S2:下载安装
使用PyQt需预先安装 PyQt Designer 和 PyQt5 ,开发工具采用 Pycharm Community ,环境下载地址:
- PyQt Designer 用于设计View试图:下载
- PyQt5环境用于编辑后台逻辑, Anaconda安装PyQt环境:Anaconda 下载
S3: 快速入门
S3.1 新建筑窗口
打开 Qt Designer 的界面,最常用的是 Widget(通用窗口) 和 Main Window(主窗口)。
S3.2 窗口主要区域介绍
以下对窗口中包含的诸多区域功能进行介绍:
- 【区域1】Widget Box 工具箱 提供很多空间,每个空间都有自己的名称,提供不同功能,例如:按钮、单选钮、文本框等。再菜单栏选择 “”窗体“”=>"预览”,或者按“ctrl+R”快捷键,可以看到窗口的预览效果。
- 【区域2】主窗口区,能够直接从工具区直接拖拽功能框到窗口。
- 【区域3】对象查看器,可以查看主窗口中仿制的对象列表;
- 【区域4】属性编辑器,提供对窗口、空间、布局的属性编辑功能,如
名称 | 功能 |
---|---|
objectName | 控件对象名称 |
geometry | 相对坐标系 |
sizePolicy | 控件大小策略 |
minimumSize | 最小宽度、高度 |
maximumSize | 最大宽度、高度 |
font | 字体 |
cursor | 光标 |
windowTitle | 窗口标题 |
windowsIcon、Icon | 窗口图标、控件图标 |
iconSize | 图标大小 |
toolTip | 提示信息 |
text | 控件文本 |
shortcut | 快捷键 |
- 【区域5】信号、槽编码器、动作编辑器和资源浏览器,信号、槽编辑器可为控件添加自定义信号和槽函数,资源浏览器可谓控件添加图片。
S3.3 查看UI文件
Qt Designer默认文件为 .ui 文件,描述窗口中空间的属性和布局,.ui 文件中包含的内容是XML(可扩展标记语言)格式。
从图中可得到,属性编辑器和文档信息是一致的。
S3.4 将.ui文件转为.py文件
有多种方式将 .ui 文件转为 .py 文件,例如这里通过命令行转换文件"firstMainWin":
pyuic5 -o firstMainWin.py firstMainWin.ui
关于pyuic5命令可到官网查看,此外还可通过python脚本和Eric IDE转换.ui到.py文件。
S3.5 界面与逻辑分离
用来显示界面的.py文件由.ui文件转化而来,因此每次修改.ui文件会造成.py文件改变。
程序需要新建一个.py文件调用界面文件,这个文件叫逻辑文件,这样实现了界面与逻辑的分离。
例如构建一个 CallFirstMainWin.py 文件,并继承界面文件的主窗口类即可,如:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from firstMainWin import *
class MyMainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.setupUi(self)
if __name__ =="__main__":
app = QApplication(sys.argv)
myWin = MyMainWindow()
myWin.show()
sys.exit(app.exec_())
参考内容:
- 《PyQt5快速开发与实战》
- MVC开发 | 菜鸟教程
- pycharm 调用 pyqt