首页 > 解决方案 > PyQt5:从设计文件加载菜单

问题描述

我正在尝试加载主程序窗口的设计文件。如何访问菜单栏、菜单(和子菜单)并设置操作?

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, design_file='Lab1_Main.ui'):
        super().__init__()
        uic.loadUi(design_file, self)

菜单已经实现到设计文件

在此处输入图像描述

标签: pythonpyqt5qt-designer

解决方案


当使用方法(或用于 pyuic 生成的文件)设置 ui 时,可以从其objectName 属性访问在设计器中创建的任何对象。uicsetupUi

在您的情况下,第一个菜单可以从 访问self.ToolsMenu,它的第一个操作是self.ChangePassword,等等。

考虑到您还可以从menuBar()函数访问菜单栏(如果存在则返回当前菜单栏,否则创建一个新菜单栏),并且您可以像使用actions()任何 QWidget 一样循环浏览其内容:

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, design_file='Lab1_Main.ui'):
        super().__init__()
        uic.loadUi(design_file, self)
        self.printActions(self.menuBar())

    def printActions(self, obj, indent=0):
        for action in obj.actions():
            if action.isSeparator() and not action.text():
                print('\t' * indent + '[separator]')
            else:
                print('\t' * indent + action.text())
                if action.menu():
                    self.printActions(action.menu(), indent + 1)

一个建议:避免使用大写的对象名称;仅对类和常量使用大写名称是一种常见做法(不仅适用于 Python),因为这种做法提高了可读性,因为更容易将类/常量与函数/变量区分开来。


推荐阅读