PyQt5 – QMenuBar, QMenu & QAction Widgets

  • Post category:Python

PyQt5是基于Qt应用程序框架的Python封装,Qt是一套图形界面框架,能够帮助我们设计美观、功能强大的GUI界面。其中QMenuBar、QMenu、QAction则是Qt中关于菜单的三个常用组件。在PyQt5中,这三个组件也都可以轻易地实现。下面,我们将会详细介绍QMenuBar、QMenu和QAction的用法。

QMenuBar

QMenuBar是菜单栏,它是一个水平排列的菜单栏,通常被放置在窗口的顶部。代码示例:

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication

class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        menubar = self.menuBar()  # 获取菜单栏实例

        fileMenu = menubar.addMenu('File') # 添加菜单

        impMenu = QMenu('Import', self) # 创建一个子菜单
        impAct = QAction('Import mail', self) # 创建一个动作
        impMenu.addAction(impAct)

        fileMenu.addMenu(impMenu) # 将子菜单添加到父菜单

        newAct = QAction('New', self) # 创建一个动作
        fileMenu.addAction(newAct) # 将动作添加到父菜单

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Menubar')
        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

首先,我们通过调用menuBar()方法创建了一个菜单栏实例。然后,我们调用addMenu()方法创建一个父菜单,并将其添加到菜单栏中。接着,我们使用QMenu()方法创建一个子菜单,这个子菜单是属于父菜单下的,并在子菜单中添加了一个动作。最终,我们将子菜单添加到父菜单中,最后将动作添加到父菜单下的动作列表中。

QMenu

QMenu是菜单,它是一个弹出菜单窗口,通常被绑定到鼠标右键或者某个其他的快捷键上。示例代码:

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication

class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('File')

        impMenu = QMenu('Import', self)
        impAct = QAction('Import mail', self)
        impMenu.addAction(impAct)

        newAct = QAction('New', self)

        fileMenu.addAction(newAct)
        fileMenu.addMenu(impMenu)  # 以子菜单的形式添加

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Context menu')
        self.show()

    def contextMenuEvent(self, event):

        cmenu = QMenu(self)

        newAct = cmenu.addAction("New")
        opnAct = cmenu.addAction("Open")
        quitAct = cmenu.addAction("Quit")
        action = cmenu.exec_(self.mapToGlobal(event.pos()))

        if action == quitAct:
            qApp.quit()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

在这里,我们创建了一个父菜单,然后使用QMenu()实例化一个子菜单,利用addMenu()方法,将子菜单添加到父菜单中,最终使用QAction()创建了两个动作,然后将它们添加到父菜单下面的动作列表中。在后面的contextMenuEvent中,我们在鼠标右击时会弹出一个菜单界面,其中包括了三个动作。当我们在这个菜单中选择了某个动作时,会触发该动作所绑定的事件。

以上是QMenuBar、QMenu、QAction在PyQt5中的完整使用攻略,更多方法和使用说明请查看官方文档。