PyQt5 QMenuBar, QMenu & QAction Widgets

PyQt5 QMenuBar, QMenu & QAction Widgets

在QMainWindow对象的标题栏下面有一个水平的 QMenuBar ,它被保留用于显示QMenu对象。

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

为了创建一个弹出式菜单,PyQt API提供了 createPopupMenu() 函数。menuBar()函数返回主窗口的QMenuBar对象。 addMenu() 函数允许将菜单添加到菜单栏。反过来,通过 addAction() 方法在菜单中添加动作。

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

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

每当任何QAction按钮被点击时,QMenu对象就会发出 触发() 信号。对被点击的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 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 Widgets

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程