PyQt5 QMenuBar, QMenu & QAction Widgets

  • Post category:Python

下面我将详细讲解 Python 的 “PyQt5 QMenuBar, QMenu & QAction” 组件的完整使用攻略。

概述

在使用 PyQt5 构建图形用户界面(GUI)时,QMenuBar, QMenu 和 QAction 组件是构建菜单和工具栏以及相应组件的基础。

QMenuBar

QMenuBar 是一个水平的菜单栏,通常显示在窗口主窗口最上面。每个菜单是一个下拉菜单,通过点击菜单或按下快捷键打开。

QMenu

QMenu 是由 QMenuBar,QMenu 或者 QAction 触发的弹出菜单。QMenu 可以包含多个 QAction。

QAction

QAction 是一个操作,可以产生动作并绑定到菜单、按钮和工具栏等上。

PyQt5 QMenuBar, QMenu & QAction 的使用方法

创建菜单栏

可以使用 menuBar() 方法创建 QMenuBar,然后调用 addMenu() 方法添加 QMenu

menu_bar = self.menuBar()
file_menu = menu_bar.addMenu('File')
edit_menu = menu_bar.addMenu('Edit')
view_menu = menu_bar.addMenu('View')

创建菜单

要创建 QMenu,需要使用 QMenu 构造函数。然后,可以随时使用 addMenu() 方法添加子菜单。

file_menu.addMenu('Open')
file_menu.addMenu('Save')
file_menu.addMenu('Exit')

创建 Action

要创建 QAction,也是使用 QAction 构造函数。之后,可以将它们添加到菜单或者工具栏中。

open_action = QAction('Open', self)
save_action = QAction('Save', self)
exit_action = QAction('Exit', self)

file_menu.addAction(open_action)
file_menu.addAction(save_action)
file_menu.addAction(exit_action)

在这个例子中,QAction 接收一个标签和一个父类对象。使用 addAction() 方法将 Action 添加到菜单中。

示例1

下面的代码演示了如何创建菜单栏、菜单与对应的 actions,并设置快捷键。

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


class Example(QMainWindow):

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

    def initUI(self):
        # 创建打开菜单
        open_act = QAction('Open', self)
        open_act.setShortcut('Ctrl+O')
        open_act.triggered.connect(self.open_file)

        # 创建保存菜单
        save_act = QAction('Save', self)
        save_act.setShortcut('Ctrl+S')
        save_act.triggered.connect(self.save_file)

        # 创建退出菜单
        exit_act = QAction('Exit', self)
        exit_act.setShortcut('Ctrl+Q')
        exit_act.triggered.connect(qApp.quit)

        # 创建菜单栏
        menubar = self.menuBar()

        # 添加文件菜单
        file_menu = menubar.addMenu('File')
        file_menu.addAction(open_act)
        file_menu.addAction(save_act)
        file_menu.addSeparator()  # 添加分割线
        file_menu.addAction(exit_act)

        # 添加编辑菜单
        edit_menu = menubar.addMenu('Edit')

        #设置窗口尺寸和标题
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('MenuBar')
        self.show()

    def open_file(self):
        print('Open file')

    def save_file(self):
        print('Save file')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

示例2

下面的代码演示了如何创建一个右键菜单。

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


class Example(QMainWindow):

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

        self.initUI()

    def initUI(self):
        # 添加文本编辑部件
        text_edit = QTextEdit(self)
        self.setCentralWidget(text_edit)

        # 创建右键菜单
        menu_bar = self.menuBar()
        file_menu = menu_bar.addMenu('File')
        edit_menu = menu_bar.addMenu('Edit')
        view_menu = menu_bar.addMenu('View')

        # 增加 Action
        copy_act = QAction('Copy', self)
        copy_act.setShortcut('Ctrl+C')
        copy_act.setStatusTip('Copy text')
        edit_menu.addAction(copy_act)

        paste_act = QAction('Paste', self)
        paste_act.setShortcut('Ctrl+V')
        paste_act.setStatusTip('Paste text')
        edit_menu.addAction(paste_act)

        # 将右键菜单关联到文本编辑器
        text_edit.setContextMenuPolicy(Qt.CustomContextMenu)
        text_edit.customContextMenuRequested.connect(self.right_click_menu)

        #设置窗口尺寸和标题
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('ContextMenu')
        self.show()

    def right_click_menu(self, pos):
        context_menu = QMenu(self)
        copy = QAction('Copy', self)
        paste = QAction('Paste', self)
        context_menu.addAction(copy)
        context_menu.addAction(paste)
        context_menu.exec_(self.mapToGlobal(pos))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

这个例子仅仅是一个基础用法,在 PyQt5 中 QMenuBar, QMenu & QAction 组件的用法还有更多,需要大家不断学习和探索。