本笔记主要参考教程:Python Qt 简介 —— 白月黑羽
目的在于学习使用 PyQt 和 QtDesigner 开发图形化界面
1. PyQt 安装和在 pycharm 中联动
参考这篇博客:PyCharm+PyQt5+QtDesigner配置
2. 第一个案例
首先使用 QtDesigner 画出相应的图形界面,很简单的一个图
其中涉及有关布局 layout 的部分,不在这里细讲,直接参看B站教程:页面布局 layout (主要觉得比较抽象。和前端的布局很像,同样,我也不大会…)
再放一个参考教程 pyqt5 布局 layout 收集
然后使用 pyuic5 生成相应的 py文件,引入到主程序中:
from PyQt5.QtWidgets import QApplication, QMainWindow
import mainWindows
# QMainWindow 为一个控件类,表示主窗口
# 要创建一个控件,就需要实例化这个控件类
# 一般把一个窗口及其控件封装至一个类中
# 我们自定义(封装)一个窗口类,继承自QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 将 ui文件:mainWindows.py 导入定义界面类
self.ui = mainWindows.Ui_MainWindow()
# 初始化界面
self.ui.setupUi(self)
# 设置窗口标题
self.setWindowTitle("第一个案例")
if __name__ == '__main__':
# QApplication 提供了整个图形界面程序的底层管理功能,应首先创建它
app = QApplication([])
# 创建主窗口这个控件,需实例化主窗口类
mainw = MainWindow()
# 显示主窗口
mainw.show()
# 只有最后一个关口关闭,才可以结束程序
app.exec_()
这里解释说明几点:
① QApplication
QApplication 提供了整个图形界面程序的底层管理功能,所以应首先创建它
app = QApplication([])
② QMainWindow
我们要在窗口中创建一个控件,就需要实例化这个控件类
从 PyQt5.QtWidgets
中引入的 QMainWindow
表示主窗口,所以需要实例化它
但一个窗口中有很多子控件,所以,为了方便管理,我们通常将一个窗口封装为一个类,即:
# 继承自QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 将 ui文件:mainWindows.py 导入定义界面类
self.ui = mainWindows.Ui_MainWindow()
# 初始化界面
self.ui.setupUi(self)
③ 控件的继承关系
直接上图吧,感觉这一部分用的不多,主要由 QtDesigner 帮我们处理完成
④ 信号(signal)与 槽(slot)
信号可理解为一个控件的动作触发的信号,槽即可理解为处理这个 signal 的函数
他们一般这样联系起来:
button.clicked.connect(handleCalc)
用QT的术语来解释上面这行代码,就是:把 button 被点击(clicked) 的信号(signal), 连接(connect)到了 handleCalc 这样的一个 slot上
⑤ 启动窗口
...
# 显示主窗口
mainw.show()
# 只有最后一个关口关闭,才可以结束程序
app.exec_()
⑥ 总结
创建程序的一般步骤如下:
- 创建 app:
app = QApplication([])
- 定义窗口类,完成信号与槽的相关逻辑:
# 继承自QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 将 ui文件:mainWindows.py 导入定义界面类
self.ui = mainWindows.Ui_MainWindow()
# 初始化界面
self.ui.setupUi(self)
- 实例化窗口类:
mainw = MainWindow()
- 启动窗口:
mainw.show()
app.exec_()
⑦ 踩坑
- 主窗口的类名必须是
MainWindow
,即:
class MainWindow(QMainWindow