python - PyQt5:从设计文件加载菜单
问题描述
我正在尝试加载主程序窗口的设计文件。如何访问菜单栏、菜单(和子菜单)并设置操作?
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, design_file='Lab1_Main.ui'):
super().__init__()
uic.loadUi(design_file, self)
菜单已经实现到设计文件
解决方案
当使用方法(或用于 pyuic 生成的文件)设置 ui 时,可以从其objectName 属性访问在设计器中创建的任何对象。uic
setupUi
在您的情况下,第一个菜单可以从 访问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),因为这种做法提高了可读性,因为更容易将类/常量与函数/变量区分开来。
推荐阅读
- android - 将 textField 结束约束设置为 parentView 中心 X 使用约束布局
- android - 如何在 Unity Android 插件中发现蓝牙设备?
- assembly - 在程序集引导加载程序中获取用户输入
- python - 按多个属性分组的 Pandas 直方图
- python - 未解决的参考:PyCharm 中的“Httpresponse”错误
- php - 如何在 PHP 中使用两个 foreach 和 if else
- c# - C# 控制台应用程序 HttpClient 抛出“System.Net.Http.WinHttpException:发生安全错误”
- excel - SeleniumBasic VBA 使用 WebElement 方法的 WebElements 最快循环
- bots - Discord Bot Maker Discord Bot 一直处于离线模式
- reactjs - 反应错误:超过最大更新深度 - 简单示例