- PyQt5 教程
- PyQt5 - 首頁
- PyQt5 - 簡介
- PyQt5 - 新特性
- PyQt5 - Hello World
- PyQt5 - 主要類
- PyQt5 - 使用 Qt Designer
- PyQt5 - 訊號與槽
- PyQt5 - 佈局管理
- PyQt5 - 基本元件
- PyQt5 - QDialog 類
- PyQt5 - QMessageBox
- PyQt5 - 多文件介面
- PyQt5 - 拖放
- PyQt5 - 資料庫處理
- PyQt5 - 繪圖 API
- PyQt5 - BrushStyle 常量
- PyQt5 - QClipboard
- PyQt5 - QPixmap 類
- PyQt5 有用資源
- PyQt5 - 快速指南
- PyQt5 - 有用資源
- PyQt5 - 討論
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()
輸出
以上程式碼產生以下輸出: