- PyQt 教程
- PyQt - 首頁
- PyQt - 簡介
- PyQt - 環境搭建
- PyQt - Hello World
- PyQt - 主要類
- PyQt - 使用 Qt Designer
- PyQt - 元物件
- PyQt 訊號 & 槽
- PyQt - 訊號和槽
- PyQt - 支援和訊號
- PyQt - 未繫結和已繫結訊號
- PyQt - 使用 PyQtSignal 建立新的訊號
- PyQt - 連線、斷開和發射訊號
- PyQt - 槽裝飾器
- PyQt - 槽連線
- PyQt 佈局
- PyQt - 佈局管理
- PyQt - QBoxLayout
- PyQt - QGridLayout
- PyQt - QFormLayout
- PyQt - QHBoxLayout
- PyQt - QVBoxLayout
- PyQt - QStackedLayout
- PyQt - QGraphicsGridLayout
- PyQt - QGraphicsAnchorLayout
- PyQt - QGraphicsLayout
- PyQt - QGraphicsLinearLayout
- PyQt 基本元件
- PyQt - 基本元件
- PyQt - QLabel 元件
- PyQt - QLineEdit 元件
- PyQt - QPushButton 元件
- PyQt - QRadioButton 元件
- PyQt - QCheckBox 元件
- PyQt - QComboBox 元件
- PyQt - QSpinBox 元件
- PyQt - QMessageBox
- PyQt - QDialogButtonBox 元件
- PyQt - QFontComboBox 元件
- PyQt - QDoubleSpinBox 元件
- PyQt - QToolBox 元件
- PyQt - QDialog 類
- PyQt - QMessageBox
- PyQt - 多文件介面
- PyQt - 拖放操作
- PyQt 繪圖 API
- PyQt - 繪圖 API
- PyQt 資料庫
- PyQt - 資料庫操作
- PyQt 核心知識
- PyQt - BrushStyle 常量
- PyQt - QClipboard
- PyQt - QPixmap 類
- PyQt 有用資源
- PyQt - 快速指南
- PyQt - 有用資源
- PyQt - 討論
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()
以上程式碼產生以下輸出: