PyQt5 - QMenuBar、QMenu 和 QAction 元件



在 QMainWindow 物件標題欄下方,保留了一個水平的QMenuBar 用於顯示 QMenu 物件。

QMenu 類提供了一個可以新增到選單欄的元件。它也用於建立上下文選單和彈出選單。每個 QMenu 物件可以包含一個或多個QAction 物件或級聯的 QMenu 物件。

要建立彈出選單,PyQt API 提供了createPopupMenu() 函式。menuBar() 函式返回主視窗的 QMenuBar 物件。addMenu() 函式允許向選單欄新增選單。依次使用addAction() 方法向選單中新增操作。

下表列出了一些在設計菜單系統中使用的重要方法。

序號 方法及描述
1

menuBar()

返回主視窗的 QMenuBar 物件

2

addMenu()

向選單欄新增一個新的 QMenu 物件

3

addAction()

向 QMenu 元件新增一個操作按鈕,包含文字或圖示

4

setEnabled()

設定操作按鈕的狀態為啟用/停用

5

addSeperator()

在選單中新增分隔線

6

clear()

移除選單/選單欄的內容

7

setShortcut()

將鍵盤快捷鍵關聯到操作按鈕

8

setText()

為操作按鈕賦值文字

9

setTitle()

設定 QMenu 元件的標題

10

text()

檢索與 QAction 物件關聯的文字

11

title()

檢索與 QMenu 物件關聯的文字

每當單擊任何 QAction 按鈕時,QMenu 物件都會發出triggered() 訊號。單擊的 QAction 物件的引用將傳遞到連線的槽函式。

示例

在這個示例中,首先儲存對頂級視窗(必須是 QMainWindow 物件)的 QMenuBar 物件的引用。

bar = self.menuBar()

使用 addMenu() 方法將“檔案”選單新增到選單欄。

file = bar.addMenu("File")

選單中的操作按鈕可以是字串或 QAction 物件。

file.addAction("New")
save = QAction("Save",self)
save.setShortcut("Ctrl+S")
file.addAction(save)

將子選單新增到頂級選單。

edit = file.addMenu("Edit")
edit.addAction("copy")
edit.addAction("paste")

檔案選單發出的 triggered() 訊號連線到 processtrigger() 方法,該方法接收導致訊號的 QAction 物件。

file.triggered[QAction].connect(self.processtrigger)

完整的程式碼如下:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class menudemo(QMainWindow):
   def __init__(self, parent = None):
      super(menudemo, self).__init__(parent)
		
      layout = QHBoxLayout()
      bar = self.menuBar()
      file = bar.addMenu("File")
      file.addAction("New")
		
      save = QAction("Save",self)
      save.setShortcut("Ctrl+S")
      file.addAction(save)
		
      edit = file.addMenu("Edit")
      edit.addAction("copy")
      edit.addAction("paste")
		
      quit = QAction("Quit",self) 
      file.addAction(quit)
      file.triggered[QAction].connect(self.processtrigger)
      self.setLayout(layout)
      self.setWindowTitle("menu demo")
		
   def processtrigger(self,q):
      print q.text()+" is triggered"
		
def main():
   app = QApplication(sys.argv)
   ex = menudemo()
   ex.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   main()

輸出

以上程式碼產生以下輸出:

QMenuBar, QMenu and QAction Widgets Output
pyqt_basic_widgets.htm
廣告
© . All rights reserved.