QMenuBar、QMenu & QAction 元件



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

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

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

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

以下是 QMenu 最常用的方法。

序號 方法 & 描述
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 PyQt4.QtCore import *
from PyQt4.QtGui 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
廣告
© . All rights reserved.