PyQt5 组件之QMenuBar

Posted 在奋斗的大道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyQt5 组件之QMenuBar相关的知识,希望对你有一定的参考价值。

QMenuBar简介

在QMainWindow对象的标题栏下方,水平的QMenuBar被保留显示QMenu对象。QMenuBar类提供了一个可以包含一个或多个QAction对象或 级联的QMenu对象,要创建一个弹出菜单,Pyqt提供了createPopupMenu()函数,menuBar()函数用于返回主窗口的QMenuBar对象:addMenu()函数可以将菜单添加到菜单栏中,通过addAction()函数可以在菜单中进行添加操作。


QMenuBar 常用方法

方法描述
menuBar()返回主窗口的QMenuBar对象
addMenu()在菜单栏中添加一个新的QMenu对象
addAction()向QMenu小控件中添加一个操作按钮,其中包含文本或图标
setEnabled()将操作按钮设置为启用/禁用
addSeperator()在菜单中添加一条分割线
clear()删除菜单栏的内容
setShortcut()将快捷键关联到操作按钮
setText()    设置菜单项的文本
setTitle()    设置QMenu小控件的标题
text()返回与QACtion对象关联的文本
title()返回QMenu小控件的标题

备注:单击任何QAction按钮时,QMenu对象都会发射triggered信号

QMenuBar 效果截图:

PyQt 设计器截图:

 

  *.ui 转换为*.py 代码 

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled9.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
import sys

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
        self.menubar.setObjectName("menubar")

        # 向菜单栏中添加新的QMenu对象,父菜单
        file = self.menubar.addMenu('File')
        # 向QMenu小控件中添加按钮,子菜单
        file.addAction('New')

        # 定义响应小控件按钮,并设置快捷键关联到操作按钮,添加到父菜单下
        save = QAction('Save', self.menubar)
        save.setShortcut('Ctrl+S')
        file.addAction(save)

        # 创建新的子菜单项,并添加孙菜单
        edit = file.addMenu('Edit')
        edit.addAction('Copy')
        edit.addAction('Paste')

        # 添加父菜单下
        quit = QAction('Quit', self.menubar)
        file.addAction(quit)

        # 单击任何Qmenu对象,都会发射信号,绑定槽函数
        file.triggered[QAction].connect(self.processtrigger)

        MainWindow.setMenuBar(self.menubar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

    def processtrigger(self, q):
        # 输出那个Qmenu对象被点击
        print(q.text() + 'is triggeres')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

 需要向PyUIC 生成的代码,添加如下代码片段:

重点实现QMenuBar设置Action和事件绑定

        # 向菜单栏中添加新的QMenu对象,父菜单
        file = self.menubar.addMenu('File')
        # 向QMenu小控件中添加按钮,子菜单
        file.addAction('New')

        # 定义响应小控件按钮,并设置快捷键关联到操作按钮,添加到父菜单下
        save = QAction('Save', self.menubar)
        save.setShortcut('Ctrl+S')
        file.addAction(save)

        # 创建新的子菜单项,并添加孙菜单
        edit = file.addMenu('Edit')
        edit.addAction('Copy')
        edit.addAction('Paste')

        # 添加父菜单下
        quit = QAction('Quit', self.menubar)
        file.addAction(quit)

        # 单击任何Qmenu对象,都会发射信号,绑定槽函数
        file.triggered[QAction].connect(self.processtrigger)
    def processtrigger(self, q):
        # 输出那个Qmenu对象被点击
        print(q.text() + 'is triggeres')

以上是关于PyQt5 组件之QMenuBar的主要内容,如果未能解决你的问题,请参考以下文章

macOS 上的 PyQt5。添加到 QMainWindow 的自定义 QMenuBar 不可点击

pyqt5-QAction

学习 PyQt5。在我的代码片段中找不到错误 [关闭]

PyQt5 组件之QDialog

PyQt5组件之QStackedWidget

PyQt5 组件之QPainter