目录
前言
本系列文章为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(