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點擊事件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章