PyQt5 - QMenuBar、QMenu 和 QAction 小部件

  • 简述

    一个水平的QMenuBarQMainWindow 对象的标题栏正下方被保留用于显示 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 对象关联的文本
    QMenu 对象发出triggered()每当单击任何 QAction 按钮时都会发出信号。对单击的 QAction 对象的引用被传递给连接的槽函数。
  • 例子

    在此示例中,首先存储对顶级窗口的 QMenuBar 对象(必须是 QMainWindow 对象)的所有引用。
    
    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")
    
    文件菜单发出的trigger() 信号连接到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()
    
  • 输出

    上面的代码产生以下输出 -
    QMenuBar、QMenu 和 QAction 小部件输出