罗湖网站建设深圳信科,wordpress照片插件,创建wordpress数据库,木渎网站制作目录 前言菜单栏相关控件使用QtDesigner快速构建菜单栏结构语法 上下文菜单概念为窗体添加上下文菜单为控件添加上下文菜单 折叠菜单资源的加载内置图标Rcc的使用创建资源文件加载资源文件 前言
本系列文章为b站PySide6教程以及官方文档的学习笔记
原视频传送门#xff1a;【… 目录 前言菜单栏相关控件使用QtDesigner快速构建菜单栏结构语法 上下文菜单概念为窗体添加上下文菜单为控件添加上下文菜单 折叠菜单资源的加载内置图标Rcc的使用创建资源文件加载资源文件 前言
本系列文章为b站PySide6教程以及官方文档的学习笔记
原视频传送门【已完结】PySide6百炼成真带你系统性入门Qt
官方文档链接Qt for Python
菜单栏
相关控件
QMenuBar: 这是最顶层的菜单栏控件通常位于窗口的顶部。它作为容纳多个菜单QMenu 对象的容器。一个标准的桌面应用程序通常有一个菜单栏包含如“文件”、“编辑”、“视图”等标准菜单。QMenu: 这个控件代表菜单栏中的一个单独菜单例如“文件”菜单。每个 QMenu 对象可以包含多个 QAction 对象这些对象代表具体的命令或选项如“打开”、“保存”、“退出”等。QAction: 这是代表具体操作的控件。它可以是菜单项、工具栏按钮或者是键盘快捷键的触发器。通过 QAction我们可以定义当用户点击菜单项或按下快捷键时应该执行的动作。
它们的逻辑关系是这样的QMenuBar 包含多个 QMenu每个 QMenu 包含多个 QAction。用户通过点击 QAction 来触发具体的功能。
当我们想为窗体添加菜单栏时窗体类型必须是QMainWindow
菜单栏中的菜单可以出现嵌套关系即一个菜单中除了操作外还有子菜单
在日常使用的软件中经常会出现这种情况
使用QtDesigner快速构建菜单栏 当我们在QtDesigner在创建一个MainWindow窗口时顶部会自动放置一个菜单栏
点击编辑栏后即可开始往菜单栏中添加菜单输入完毕需要敲回车键确认 当我们添加了一个菜单之后我们可以选择点击右边的编辑栏继续向菜单栏添加菜单或者点击当前菜单下方的编辑栏向当前菜单中添加子菜单或操作
菜单中的子菜单在QtDesigner中只能输入英文如果想要输入中文可以在属性中设置 点击操作项右边的拓展图标我们可以将其变为子菜单 接着我们就能在该子菜单中添加操作和子菜单 分隔符在菜单栏的设计中通常是用来将菜单中的不同功能分隔开使其更加美观所以说其实可有可无
在动作编辑器中我们可以为具体操作配置图标和快捷键 当然我们还可以通过右键窗口来添加工具栏 可以直接将已有操作拖入工具栏 结构语法
在设计时我们一般是先想到有哪些菜单需要实现再去详细设计这些菜单下的操作
但是在编写代码时我们需要自底向上先将操作/子菜单添加到菜单再将菜单添加到菜单栏
class MyWindow(QMainWindow):def __init__(self):super().__init__()self.menu self.menuBar()self.openFile QAction(打开文件)self.closeFile QAction(关闭文件)self.moreMenu QMenu(更多)self.more1 QAction(更多1)self.more2 QAction(更多2)self.moreMenu.addAction(self.more1)self.moreMenu.addAction(self.more2)self.fileMenu QMenu(文件)self.fileMenu.addAction(self.openFile)self.fileMenu.addAction(self.closeFile)self.fileMenu.addMenu(self.moreMenu)self.menu.addMenu(self.fileMenu)self.mainlayout QVBoxLayout()self.setLayout(self.mainlayout)我们使用addAction()方法将操作添加到菜单中
使用addMenu()方法可以将子菜单添加到菜单中或将菜单添加到菜单栏中
同时我们也可以将操作项的triggered信号绑定到槽
self.openFile.triggered.connect(lambda: print(打开文件))
self.closeFile.triggered.connect(lambda: print(关闭文件))
self.more1.triggered.connect(lambda: print(更多1))上下文菜单
概念
上下文菜单即我们在应用程序中右键点出的菜单 这里贴一张Edge浏览器的上下文菜单截图可以发现与我们的普通菜单的元素非常相似
事实上在代码实现上上下文菜单的实现逻辑也和菜单栏和相似
为窗体添加上下文菜单
我们可以为窗体本身或者控件添加上下文菜单
先来介绍如何给窗体本身添加
将窗体想象为一个菜单那么我们就可以向其中添加子菜单和操作
但是在添加之前我们需要先设置上下文菜单策略
from PySide6.QtCore import Qt
self.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)接下来我们直接使用窗体本身的addAction()方法来添加菜单项
self.addAction(self.openFile)
self.addAction(self.closeFile)添加菜单项时也可以使用更简洁的列表添加
self.addActions([self.openFile,self.closeFile])为控件添加上下文菜单
其实许多控件本身是自带上下文菜单的
当我们在页面中添加一个编辑框并右击它时会出现如下的上下文菜单 包括重做、恢复、复制、粘贴等对输入内容的基本操作
当然我们也可以修改这个默认的上下文菜单向其中添加自定义操作
首先我们还是需要为控件设置上下文菜单策略
self.lineEdit1.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)接下来我们对控件使用addActions()方法来添加菜单项
self.sendValue QAction(发送值到输入框2)
self.showCurrentValue QAction(显示当前值)
self.lineEdit1.addActions([self.sendValue, self.showCurrentValue])最后我们可以为这两个操作绑定逻辑
self.sendValue.triggered.connect(lambda: self.lineEdit2.setText(self.lineEdit1.text()))self.showCurrentValue.triggered.connect(lambda: print(self.lineEdit1.text()))折叠菜单
首先规划选项卡中的布局和内容
这里我们写两个选项卡用于演示
#创建折叠选项卡内容
self.widget1 QWidget()
self.widget1Layout QVBoxLayout()
self.widget1Layout.addWidget(QLabel(这是第一个选项卡))
self.widget1Layout.addWidget(QPushButton(按钮1))
self.widget1.setLayout(self.widget1Layout)self.widget2 QWidget()
self.widget2Layout QVBoxLayout()
self.widget2Layout.addWidget(QLabel(这是第二个选项卡))
self.widget2Layout.addWidget(QPushButton(按钮2))
self.widget2.setLayout(self.widget2Layout)接下来我们创建折叠窗QToolBox并将选项卡用addItem方法置入
self.toolBox QToolBox()
self.toolBox.addItem(self.widget1, 选项卡1)
self.toolBox.addItem(self.widget2, 选项卡2)self.mainlayout QVBoxLayout()
self.mainlayout.addWidget(self.toolBox)
self.setLayout(self.mainlayout)效果如下 当然我们也可以加上图标
# 创建一个右箭头图标和一个下箭头图标
self.arrowRight self.style().standardIcon(QStyle.StandardPixmap.SP_ArrowRight)
self.arrowDown self.style().standardIcon(QStyle.StandardPixmap.SP_ArrowDown)self.toolBox QToolBox()
self.toolBox.addItem(self.widget1, self.arrowDown,选项卡1)
self.toolBox.addItem(self.widget2, self.arrowRight,选项卡2)
self.toolBox.currentChanged.connect(self.changeArrow)...def changeArrow(self, index):# 全部重置为右箭头for i in range(self.toolBox.count()):self.toolBox.setItemIcon(i, self.arrowRight)# 当前选项卡设置为下箭头self.toolBox.setItemIcon(index, self.arrowDown)效果如下 资源的加载
内置图标
PySide6提供了一组内置的图标我们可以在应用程序中使用这些图标来美化界面或者作为按钮、工具栏等控件的图标。
我们可以通过QStyle类中的standardIcon()方法来访问这些内置图标。
以下是一些常用的内置图标
SP_ArrowUp: 向上箭头SP_ArrowDown: 向下箭头SP_ArrowLeft: 向左箭头SP_ArrowRight: 向右箭头SP_DialogOkButton: 对话框确认按钮SP_DialogCancelButton: 对话框取消按钮SP_FileIcon: 文件图标SP_DirIcon: 文件夹图标SP_ComputerIcon: 计算机图标
要使用这些内置图标首先需要导入 QStyle 类
from PySide6.QtWidgets import QStyle在窗口初始化时我们需要获取图标对象
self.okIcon self.style().standardIcon(QStyle.StandardPixmap.SP_DialogOkButton)最后我们可以将这些图标对象直接应用到需要的控件上
okButton QPushButton(OK)
okButton.setIcon(self.okIcon)Rcc的使用
当我们打包软件时一般只有py文件或者是一些源码和环境被打包进exe而资源文件仍然存在指定目录下的文件夹下
这样往往会显得软件较为臃肿还容易将资源文件误删
我们可以使用Rcc来将各种资源文件(图像、视频、数据库等)转成py文件和代码一块打包
在PySide6中**RCCResource Compiler**是一个用于将资源文件如图像、样式表等编译成二进制格式的工具。编译后的资源文件可以嵌入到Python可执行文件中以便在运行时轻松访问这些资源。
创建资源文件
我们可以使用Qt Designer来轻松创建和管理这些二进制资源文件
打开Qt Designer我们可以点击菜单栏的视图资源浏览器来开启资源视图 此时右下角会多出一个资源浏览器 点击左上角的编辑按钮即可编辑资源 编辑界面中有三个需要关注的按钮新建资源文件、添加前缀以及添加文件
这里我们可以将其类比于数据库
每个资源文件即一个二进制py文件可以看作是一个库我们在项目中可以引入这些资源库
而前缀即库中的一些表可以当作子目录我们可以将相同类型的资源文件添加到相同前缀中
而文件即具体的资源文件作为前缀中的一些的表项 创建完毕后我们在vscode中找到生成的qrc文件右键该文件点击Compile进行编译 随后即可得到二进制py文件 加载资源文件
当我们想加载得到的二进制资源文件中的资源时可以直接在Qt Designer中可视化引用
例如我们添加一个按钮后可以在属性编辑器中选择图标 点击选择资源即可从我们创建的资源文件库中挑选资源 当然我们也可以在代码中加载资源
首先引用资源文件库
import test_rc接着我们可以通过特殊的路径引用方法使用库中的资源创建图标即:/前缀/路径
check_yes_icon QIcon()
check_yes_icon.addFile(u:/icons/icons/check_yes.png, QSize(), QIcon.Normal, QIcon.Off)需要注意的是这里的路径中前一个icons为前缀名而后面的icons/check_yes.png为一开始创建资源文件时该资源相对于资源文件库的路径
所以其实为了更便捷地引用在一开始创建资源库时最好这些资源和库文件放在同一目录下 文章转载自: http://www.morning.stprd.cn.gov.cn.stprd.cn http://www.morning.fktlg.cn.gov.cn.fktlg.cn http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn http://www.morning.bzlfw.cn.gov.cn.bzlfw.cn http://www.morning.mfct.cn.gov.cn.mfct.cn http://www.morning.cwzzr.cn.gov.cn.cwzzr.cn http://www.morning.rkypb.cn.gov.cn.rkypb.cn http://www.morning.hqwxm.cn.gov.cn.hqwxm.cn http://www.morning.zlnf.cn.gov.cn.zlnf.cn http://www.morning.sbncr.cn.gov.cn.sbncr.cn http://www.morning.dpzcc.cn.gov.cn.dpzcc.cn http://www.morning.qwbls.cn.gov.cn.qwbls.cn http://www.morning.lwyqd.cn.gov.cn.lwyqd.cn http://www.morning.jxzfg.cn.gov.cn.jxzfg.cn http://www.morning.jbkcs.cn.gov.cn.jbkcs.cn http://www.morning.ffrys.cn.gov.cn.ffrys.cn http://www.morning.rwcw.cn.gov.cn.rwcw.cn http://www.morning.ympcj.cn.gov.cn.ympcj.cn http://www.morning.ntqnt.cn.gov.cn.ntqnt.cn http://www.morning.hnkkf.cn.gov.cn.hnkkf.cn http://www.morning.gjqwt.cn.gov.cn.gjqwt.cn http://www.morning.tgpgx.cn.gov.cn.tgpgx.cn http://www.morning.lphtm.cn.gov.cn.lphtm.cn http://www.morning.lokext.com.gov.cn.lokext.com http://www.morning.hkng.cn.gov.cn.hkng.cn http://www.morning.ykqbs.cn.gov.cn.ykqbs.cn http://www.morning.kztts.cn.gov.cn.kztts.cn http://www.morning.ggtgl.cn.gov.cn.ggtgl.cn http://www.morning.qcslh.cn.gov.cn.qcslh.cn http://www.morning.kpbn.cn.gov.cn.kpbn.cn http://www.morning.fphbz.cn.gov.cn.fphbz.cn http://www.morning.lgxzj.cn.gov.cn.lgxzj.cn http://www.morning.fwgnq.cn.gov.cn.fwgnq.cn http://www.morning.sldrd.cn.gov.cn.sldrd.cn http://www.morning.nnhrp.cn.gov.cn.nnhrp.cn http://www.morning.plgbh.cn.gov.cn.plgbh.cn http://www.morning.ttrdr.cn.gov.cn.ttrdr.cn http://www.morning.kjcll.cn.gov.cn.kjcll.cn http://www.morning.ysbrz.cn.gov.cn.ysbrz.cn http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn http://www.morning.xyrss.cn.gov.cn.xyrss.cn http://www.morning.ggjlm.cn.gov.cn.ggjlm.cn http://www.morning.dhyqg.cn.gov.cn.dhyqg.cn http://www.morning.ckhpg.cn.gov.cn.ckhpg.cn http://www.morning.hmbxd.cn.gov.cn.hmbxd.cn http://www.morning.tzrmp.cn.gov.cn.tzrmp.cn http://www.morning.rfjmy.cn.gov.cn.rfjmy.cn http://www.morning.gfprf.cn.gov.cn.gfprf.cn http://www.morning.pcxgj.cn.gov.cn.pcxgj.cn http://www.morning.lxfyn.cn.gov.cn.lxfyn.cn http://www.morning.qiyelm.com.gov.cn.qiyelm.com http://www.morning.tturfsoc.com.gov.cn.tturfsoc.com http://www.morning.ttaes.cn.gov.cn.ttaes.cn http://www.morning.pcqdf.cn.gov.cn.pcqdf.cn http://www.morning.kpgbz.cn.gov.cn.kpgbz.cn http://www.morning.mprpx.cn.gov.cn.mprpx.cn http://www.morning.ztcwp.cn.gov.cn.ztcwp.cn http://www.morning.mftzm.cn.gov.cn.mftzm.cn http://www.morning.dkzrs.cn.gov.cn.dkzrs.cn http://www.morning.cpktd.cn.gov.cn.cpktd.cn http://www.morning.njqpg.cn.gov.cn.njqpg.cn http://www.morning.rgsnk.cn.gov.cn.rgsnk.cn http://www.morning.ldsgm.cn.gov.cn.ldsgm.cn http://www.morning.fgkwh.cn.gov.cn.fgkwh.cn http://www.morning.rbhcx.cn.gov.cn.rbhcx.cn http://www.morning.wctqc.cn.gov.cn.wctqc.cn http://www.morning.nlkjq.cn.gov.cn.nlkjq.cn http://www.morning.hcsnk.cn.gov.cn.hcsnk.cn http://www.morning.byxs.cn.gov.cn.byxs.cn http://www.morning.lpbrp.cn.gov.cn.lpbrp.cn http://www.morning.ghqyr.cn.gov.cn.ghqyr.cn http://www.morning.ljdjn.cn.gov.cn.ljdjn.cn http://www.morning.fnfxp.cn.gov.cn.fnfxp.cn http://www.morning.nzsdr.cn.gov.cn.nzsdr.cn http://www.morning.huayaosteel.cn.gov.cn.huayaosteel.cn http://www.morning.rkkh.cn.gov.cn.rkkh.cn http://www.morning.nbrdx.cn.gov.cn.nbrdx.cn http://www.morning.smggx.cn.gov.cn.smggx.cn http://www.morning.gtylt.cn.gov.cn.gtylt.cn http://www.morning.kxqfz.cn.gov.cn.kxqfz.cn