PyQt5 QMenuBar、QMenu 和 QAction 菜单组件完整使用教程


发布日期 : 2021-10-22 04:38:53 UTC

访问量: 10 次浏览

PyQt5 QMenuBar,QMenu和QAction小部件

一个水平的 QMenuBar 位于 QMainWindow 对象的标题栏下方,用于显示 QMenu 对象。

QMenu 类提供了一个可以添加到菜单栏的小部件。它还用于创建上下文菜单和弹出菜单。每个 QMenu 对象可以包含一个或多个 QAction 对象或级联的 QMenu 对象。

为了创建一个弹出菜单,PyQtAPI提供了 createPopupMenu() 函数。
menuBar() 函数返回主窗口的QMenuBar对象。用 addMenu() 函数将菜单添加到菜单栏中。然后,使用 addAction() 方法在菜单中添加动作。

下表列出了设计菜单系统时使用的一些重要方法。

序号方法和描述
1menuBar() 返回主窗口的QMenuBar对象
2addMenu() 在菜单栏中添加一个新的QMenu对象
3addAction() 向QMenu小部件添加一个由文本或图标组成的操作按钮
4setEnabled() 将操作按钮的状态设置为启用/禁用
5addSeperator() 在菜单中添加一个分隔线
6Clear() 清除菜单/菜单栏的内容
7setShortcut() 为操作按钮关联键盘快捷方式
8setText() 为操作按钮分配文本
9setTitle() 设置QMenu小部件的标题
10text() 检索与QAction对象关联的文本
11title() 检索与QMenu对象关联的文本

QMenu 对象在任何 QAction 按钮被点击时发射 triggered() 信号。连接的槽函数接收到所点击的 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")

由文件菜单发出的 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()

输出

上述代码产生以下输出:

PyQt5 QMenuBar,QMenu和QAction小部件