QMenuBar QMenu 和 QAction
QMainWindow对象标题栏正下方的水平QMenuBar保留用于显示QMenu对象。
QMenu类提供了一个可添加到菜单栏的小部件。 它还用于创建上下文菜单和弹出菜单。 每个QMenu对象可以包含一个或多个QAction对象或级联的QMenu对象。
为了创建弹出菜单,PyQt API提供了createPopupMenu()函数。 menuBar()函数返回主窗口的QMenuBar对象。 addMenu()函数允许向栏添加菜单。 反过来,通过addAction()方法在菜单中添加操作。
下表列出了设计菜单系统时使用的一些重要方法。
Sr.No. | 方法和描述 |
---|---|
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对象的引用将传递给连接的槽功能。
例子 (Example)
在此示例中,首先存储对顶级窗口(必须是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()
上面的代码产生以下输出 -