PySide2基础篇(十二)——QMenuBar和QMenu运用

PySide2基础篇(十二)——QMenuBar和QMenu运用

前言:
阅读这篇文章我能学到什么?
  每个对话框都可以设置一个菜单栏,菜单栏是分类管理按钮的最佳控件。请阅读这篇文章学学。

——如果你觉得这是一篇不错的博文,希望你能给一个小小的赞,感谢您的支持。

1 创建菜单栏和添加菜单项

  我们尝试对主对话框添加菜单栏,并为菜单栏中添加菜单项。
  代码示例:

from PySide2.QtWidgets import QApplication, QMainWindow, QMenuBar, QMenu

app = QApplication([])

MainWindow = QMainWindow()

MenuBar = MainWindow.menuBar()                  #获取主对话框的菜单栏
MenuBar.resize(100, 20)

MenuA = MenuBar.addMenu("MenuA")                #给MenuBar添加菜单
MenuA1 = MenuA.addMenu("A1")                    #菜单嵌套子菜单
MenuA1.addAction("A1a")
MenuA1.addAction("A1b")
ActionA2 = MenuA.addAction("A2")                #菜单添加Action
MenuB = MenuBar.addMenu("MenuB")
MenuB1 = MenuB.addMenu("B1")
MenuB1.addAction("B1a")
MenuB1.addAction("B1b")
MenuB.addAction("B2")

MainWindow.show()
app.exec_()

  运行结果:
在这里插入图片描述
  操作的过程为首先给对话框创建QMenuBar,然后给其添加QMenu或直接添加QActionQMenu又可继续嵌套添加QMenuQAction,总是QMenu是用来选择的,真正点击的是QAction

2 对QMenuBar的其他操作

2.1 添加图标

  与其他空间类似,QMenu可以显示图标同时显示文本,但QMenuBar下的第一级QMenu添加图标后将不显示文本。
  代码示例:

from PySide2.QtWidgets import QApplication, QMainWindow, QMenuBar, QMenu
from PySide2.QtGui import QIcon

app = QApplication([])

MainWindow = QMainWindow()

Icon = QIcon(".\png\Icon.ico")

MenuBar = MainWindow.menuBar()                  #获取主对话框的菜单栏
MenuBar.resize(100, 20)

MenuA = MenuBar.addMenu("MenuA")                #给MenuBar添加菜单,MenuA文本将不会显示
MenuA.setIcon(Icon)
MenuA1 = MenuA.addMenu("A1")                    #菜单嵌套子菜单
MenuA1.setIcon(Icon)
ActionA1a = MenuA1.addAction("A1a")
ActionA1a.setIcon(Icon)
ActionA1b = MenuA1.addAction("A1b")
ActionA1b.setIcon(Icon)
ActionA2 = MenuA.addAction("A2")                #菜单添加Action
ActionA2.setIcon(Icon)

MainWindow.show()
app.exec_()

  运行结果:
在这里插入图片描述

2.2 给QMenu添加分割线

  在添加的QMenu项之后可以调用addSeparator()添加分割线,显示效果与添加的顺序有关系。
  代码示例:

from PySide2.QtWidgets import QApplication, QMainWindow, QMenuBar, QMenu
from PySide2.QtGui import QIcon

app = QApplication([])

MainWindow = QMainWindow()

Icon = QIcon(".\png\Icon.ico")

MenuBar = MainWindow.menuBar()                  #获取主对话框的菜单栏
MenuBar.resize(100, 20)

MenuA = MenuBar.addMenu("MenuA")                #给MenuBar添加菜单,MenuA文本将不会显示
MenuA.setIcon(Icon)
MenuA1 = MenuA.addMenu("A1")                    #菜单嵌套子菜单
MenuA1.setIcon(Icon)
MenuA.addSeparator()                            #添加分割线
ActionA1a = MenuA1.addAction("A1a")
ActionA1a.setIcon(Icon)
MenuA1.addSeparator()                           #添加分割线
ActionA1b = MenuA1.addAction("A1b")
ActionA1b.setIcon(Icon)
ActionA1c = MenuA1.addAction("A1c")
ActionA1c.setIcon(Icon)
ActionA2 = MenuA.addAction("A2")                #菜单添加Action
ActionA2.setIcon(Icon)

MainWindow.show()
app.exec_()

  运行结果:
在这里插入图片描述

3 添加点击事件

  需要注意的是QMenu只是显示分支,最终点击选择的是QAction。给QMenu添加点击事件时,该QMenu下的任一QAction被点击都会触发点击事件。QAction也可以添加点击事件。
  代码示例:

from PySide2.QtWidgets import QApplication, QMainWindow, QMenuBar, QMenu
from PySide2.QtCore import Slot

app = QApplication([])

MainWindow = QMainWindow()

MenuBar = MainWindow.menuBar()                  #获取主对话框的菜单栏
MenuBar.resize(100, 20)

MenuA = MenuBar.addMenu("MenuA")                #给MenuBar添加菜单
MenuA1 = MenuA.addMenu("A1")                    #菜单嵌套子菜单
ActionA1a = MenuA1.addAction("A1a")             #菜单项添加Action
ActionA1b = MenuA1.addAction("A1b")
ActionA2 = MenuA.addAction("A2")

@Slot()
def ClickMenuBar():
    print("Click MenuBar")

@Slot()
def ClickMenuA():
    print("Click MenuA")

@Slot()
def ClickMenuA1():
    print("Click MenuA1")

@Slot()
def ClickMenuA1a():
    print("Click MenuA1a")

@Slot()
def ClickMenuA1b():
    print("Click MenuA1b")

@Slot()
def ClickMenuA2():
    print("Click MenuA2")

MenuBar.triggered.connect(ClickMenuBar)                 #给菜单栏添加点击事件
MenuA.triggered.connect(ClickMenuA)                     #给菜单A添加点击事件
MenuA1.triggered.connect(ClickMenuA1)                   #给菜单A1添加点击事件
ActionA2.triggered.connect(ClickMenuA2)                 #给ActionA2添加点击事件
ActionA1a.triggered.connect(ClickMenuA1a)               #给ActionA1a添加点击事件
ActionA1b.triggered.connect(ClickMenuA1b)               #给ActionA1b添加点击事件

MainWindow.show()
app.exec_()

  运行结果:
在这里插入图片描述
  需要注意这里事件响应的顺序。QMenu嵌套时优先响应子层的点击事件。QMenu下的点击事件和QAction点击事件,会优先响应QMenu点击事件后响应QAction点击事件。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值