文章目录
前言
第三节_PySide6中Qt Designer 的基础使用_上篇 详细介绍了如何通过拖曳鼠标等可视化操作创建一个 UI 程序,并进行UI界面布局操作;由于Qt Designer 符合 MVC(模型—视图—控制器)设计模式,做到了显示和业务逻辑的分离,本节主要会对“信号/槽编辑器” 面板、 “动作编辑器” 面板和“资源浏览器” 面板功能进行详细的讲解,使读者明白业务逻辑方面,从而能整体构建出一个exe运行程序。
一、“信号/槽编辑器” 、 “动作编辑器” 和“资源浏览器” 面板简介
1.信号/槽编辑器面板(Signal/Slot Editor)
①功能概述
作用: 可视化连接控件的 信号(Signal) 与 槽函数(Slot),定义事件触发逻辑;
核心概念: 1)信号:控件的事件(如按钮点击 clicked、文本框内容变化 textChanged);
2)槽:事件触发后执行的函数(如关闭窗口 close()、更新标签文本 setText())。
②典型场景
1)快速原型设计:无需编写代码即可预览简单交互(如点击按钮关闭窗口);
2)简单逻辑绑定:直接连接内置槽函数(如 show()、hide())。
2.动作编辑器面板(Action Editor)
①功能概述
作用: 集中管理 QAction 对象,用于创建可复用的菜单项、工具栏按钮和快捷键操作;
核心价值: 统一配置动作属性(如文本、图标、快捷键),避免重复代码;
②典型场景
1)菜单/工具栏同步:同一操作(如“保存文件”)同时在菜单和工具栏展示;
2)快捷键管理:统一配置全局快捷键(如 Ctrl+S 触发保存动作)。
3.资源浏览器面板(Resource Browser)
①功能概述
作用: 管理应用程序的静态资源(如图片、图标、样式表),通过 .qrc 文件编译为 Python 模块,避免硬编码路径;
核心流程: 添加资源 → 编译为 .py → 代码中通过 :/ 前缀引用;
②典型场景
1)图标管理:统一应用图标、工具栏按钮图标;
2)样式表嵌入:将 CSS 文件编译到资源中,动态加载界面样式。
4.归纳
面板 | 核心功能 | 开发效率提升点 |
---|---|---|
信号/槽编辑器 | 快速绑定简单事件逻辑 | 减少基础交互的编码量 |
动作编辑器 | 统一管理菜单、工具栏和快捷键 | 避免重复配置,提升代码可维护性 |
资源浏览器 | 集中管理图片、图标等静态资源 | 消除路径依赖,便于跨平台部署 |
通过合理利用这三个面板,开发者可以高效完成界面设计、事件绑定和资源管理,显著降低 PySide6 项目的开发复杂度。
但是 信号/槽 在 UI 界面只能处理简单的逻辑,复杂逻辑(如参数传递、动态绑定)仍需在代码中处理,故本节不会讲解,后续只会通过代码来对 信号/槽 进行讲解。
二、资源文件的添加
1.资源文件创建
在资源浏览器面板①点击 “编辑资源 ”按钮;②新建qrc资源文件,命名为res002.qrc,并保存到项目根目录;③添加前缀,并命名为res;④添加所需要的文件,如图片、图标:
2.将.qrc 文件转换为.py 文件
使用PySide6-rcc资源文件编译工具将 res002.qrc 文件转换成 res002_rc.py 文件,便于主程序中进行引用和后续exe可执行文件的打包。(注意:如果 res002.qrc 资源文件进行了重新添加或者更改后,一定要使用 PySide6-rcc 工具将 res002.qrc 文件再次进行转换,这样主程序引用的 res002_rc.py文件就能一直保持最新的)
三、菜单栏与工具栏
1.菜单栏的添加
①Main Window 即主窗口,主要包含菜单栏、工具栏、任务栏等。先双击菜单栏中的 “在这里输入”,然后输入文字,最后按 Enter 键即可生成菜单。对于一级菜单,可以通过输入“文件(&F)”和“编辑(&E)”来加入菜单的快捷键,需要注意的是,要按 Enter 键来确认菜单的输入:
②在 Qt 和 PySide6 中,& 符号用于 定义快捷键(助记符),使得用户可以通过 Alt + 字母 快速操作控件(如按钮、菜单项);
1)文本解析:
Qt 在渲染控件文本时,会自动检测 & 符号,并将其后的第一个有效字母标记为快捷键;
& 符号本身不会显示,而是触发下划线效果(如 “Save” 显示为 “S ave”)。
2)事件绑定:
Qt 自动将快捷键与控件的默认动作绑定(如按钮的 clicked 信号);
无需手动编写快捷键逻辑(如 QShortcut)。
3)使用场景
menu = QMenu(“&File”) ---------------------- # Alt+F 展开菜单
action = menu.addAction(“&New”) ---------- # Alt+N 触发动作
③在第一级菜单 文件(&F) 下输入 “打开” 、“新建” 和 “关闭” 这 3 个子菜单,每个子菜单间添加分隔符;在第一级菜单 编辑(&E) 下输入 “计算器” 和 “记事本” 这 2 个子菜单,子菜单间添加分隔符。(注意:在菜单栏中子菜单无法输入中文,先用拼音代替,后续可以通过 “属性编辑器” 或者 “动作编辑器” 面板进行中文改名)
④在 “动作编辑器” 面板对上面添加的 子菜单 进行动作编辑,双击需要操作的 子菜单 进入动作编辑界面,对每一栏进行编辑,第 5 步和第 6 步都是进行添加图标,区别是第 5 步是引用的内部自带的系统图标;第 6 步是可以直接引用路径或者qrc资源,如果选中资源文件,就会直接跳转到 “资源浏览器” 界面,从而选中资源,这样上面创建的资源文件就可以用于此时了:
下图是 5 个子菜单动作添加完成后的界面:
2.工具栏的添加
①在主窗口添加工具栏。Qt Designer 默认生成的主窗口是不显示工具栏的,可以通过单击鼠标右键来添加工具栏,添加完成后可以在对象检查器中看到 “menubar”、“toolBar”、“statusbar”、,分别代表菜单栏、工具栏和状态栏(位置位于主界面的最下方):
②将需要的动作从“动作编辑器”面板拖曳到工具栏中,可以看到如果 子菜单 动作中增加了系统图标或者自定义图标,都会在工具栏以图标的形式显示,如果没添加图标,在工具栏中就以 子菜单 动作的文本进行显示:
四、界面文件和逻辑文件的结合
1.完成界面文件
对UI界面按照自我想法进行优化调整,例如通过引用已完成的 qrc资源文件 来添加图标。当优化完成后进行保存,并使用 PySide6-uic工具将 test002.ui 文件转换成直接导入的 Python 代码 test002_ui.py 文件,此时界面文件的工作已全部完成:
2.完成逻辑文件
在 Demo002.py 中编写主程序:
import sys
import os
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
from UI.test002_ui import Ui_MainWindow
class MyWindow(QMainWindow): # 这里的继承的父类一定要注意使用你定义UI窗体类型
def __init__(self):
super().__init__()
# 实例化 ui.py 文件中的UI窗体类
self.ui = Ui_MainWindow()
# 使用 Ui_MainWindow 中的 setupUi 方法给当前窗体加载 ui 界面
self.ui.setupUi(self)
# 菜单的点击事件,当点击打开菜单时连接槽函数 openFile()
self.ui.FileOpen.triggered.connect(self.openFile)
# 菜单的点击事件,当点击关闭菜单时连接槽函数 close()
self.ui.FileClose.triggered.connect(self.close)
# 通过按键和自定义函数关闭程序
self.ui.btn_Close.clicked.connect(self.close)
# 打开计算器
self.ui.OpenCalc.triggered.connect(lambda: os.system('calc'))
# 通过按键和自定义函数打开计算器
self.ui.btn_OpenCalc.clicked.connect(self.m_OpenCalc)
# 打开记事本
self.ui.OpenNote.triggered.connect(lambda: os.system('notepad'))
#通过按键和自定义函数打开记事本
self.ui.btn_OpenNote.clicked.connect(self.m_OpenNote)
# 打开图片
self.ui.btn_Select.clicked.connect(self.file_filter) # 信号/槽
def openFile(self):
file, ok = QFileDialog.getOpenFileName(self, caption="打开", dir=os.path.abspath('.'), filter="All Files (*);;Text Files (*.txt)")
# 在状态栏显示文件地址
self.statusBar().showMessage(file)
def m_OpenCalc(self):
self.ui.TextEdit_1.setPlainText("打开了计算器!!!")
os.system('calc')
def m_OpenNote(self):
self.ui.TextEdit_1.setPlainText("打开了记事本!!!")
os.system('notepad')
def file_filter(self):
file_name, _ = QFileDialog.getOpenFileName(self, caption='Open file1', dir=os.path.abspath('.'),
filter="Image files (*.jpg *.png);;Image files2(*.ico *.gif);;All files(*)")
self.ui.lab_Image.setPixmap(QPixmap(file_name))
self.ui.lineEdit.setText(file_name)
# 使用 setScaledContents 函数从而让图像自适应QLabel窗口
self.ui.lab_Image.setScaledContents(True)
self.ui.TextEdit_2.setPlainText("打开了图片!路径为:" + file_name)
if __name__ == "__main__":
app = QApplication(sys.argv)
#设置UI界面的图标,使用:/来引用资源文件
app.setWindowIcon(QIcon(':/res/Resources/image/5.jpeg'))
windows = MyWindow()
windows.show()
sys.exit(app.exec())
3.主体逻辑代码解析
① from UI.test002_ui import Ui_MainWindow 代码将界面文件结合在主体函数中,然后通过实例化UI窗体 self.ui = Ui_MainWindow() 达到在主程序对各控件的操作;
② 每个 PySide 6 程序都需要有一个 QApplication 对象,QApplication 对象包含在QtWidgets 模块中。sys.argv 是一个命令行参数列表。Python 脚本可以从 Shell 中执行,也可以携带参数,这些参数会被 sys.argv 捕获,代码如下:
app = QApplication(sys.argv)
③ 实例化MyWindow(),并在屏幕上显示,代码如下:
windows = MyWindow()
windows.show()
④ app.exec()是 QApplication 对象的函数,exec()函数的作用是“进入程序的主循环直到 exit()被调用”。如果没有 exec()函数,win.show()函数也会起作用,只是运行的时候窗口会闪退,这是因为没有“进入程序的主循环”就直接结束了。使用 sys.exit()函数退出可以确保程序完整地结束,在这种情况下系统的环境变量会记录程序是如何退出的。代码如下:
sys.exit(app.exec())
4.程序运行展示
总结
以上通过对“信号/槽编辑器” 面板、 “动作编辑器” 面板和“资源浏览器” 面板功能进行详细的讲解,来阐述程序的业务逻辑方面,后续使界面文件和逻辑文件相结合,从而完成一个完整的程序,达到了快速入门目的,小伙伴也动手写一个小程序吧!
PySide6中Qt Designer 的基础使用篇源码下载地址为:
https://download.csdn.net/download/qq_44869959/90897791