在QMainWindow对象的标题栏下方,水平的QMenuBar被保留显示QMenu对象。
QMenu类提供了一个可以添加到菜单栏的小控件,也用于创建上下文菜单和弹出菜单。每个QMenu对象都可以包含一个或多个QAction对象或级联的QMenu对象。
要创建一个弹出菜单,PyQt API提供了createPopupMenu()函数;menuBar()函数用于返回主窗口的QMenuBar对象;addMenu()函数可以将菜单添加到菜单栏中;通过addAction()函数可以在菜单中进行添加操作。
在设计菜单系统时使用的一些方法:
menuBar() 返回主窗口的QMenuBar对象
addMenu() 在菜单栏中添加一个新的QMenu对象
addAction() 向QMenu小控件中添加一个操作按钮,其中包含文本或图标
setEnabled() 将操作按钮状态设置为启用/禁用
addSeperator() 在菜单中添加一条分隔线
clear() 删除菜单/菜单栏的内容
setShortcut() 将快捷键关联到操作按钮
setText() 设置菜单项的文本
setTitle() 设置QMenu小控件的标题
text() 返回与QAction对象关联的文本
title() 返回QMenu小控件的标题
单击任何QAction按钮时,QMenu对象都会发射triggered信号。
案例34 QMebuBarr的使用
import sys from PyQt5.QtWidgets import QMainWindow, QApplication, QHBoxLayout, QAction class MenuBarDemo(QMainWindow): def __init__(self, parent=None): super().__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") if __name__ == "__main__": app = QApplication(sys.argv) demo = MenuBarDemo() demo.show() sys.exit(app.exec_())