gpt4 book ai didi

python - 是否可以让 PySide 的 QUIloader 像 PyQt 的 uic.loadUi 一样工作?

转载 作者:行者123 更新时间:2023-11-28 19:30:16 34 4
gpt4 key购买 nike

<分区>

所以我有一个应用程序,我正在考虑从 PyQt4 迁移到 PySide。在此应用程序中,我经常使用 .ui 文件,使用模式如下:

class BaseGUIWidget(QWidget):
def __init__(self, parent = None, ui_file = None):
'''
:param parent: parent widget of this widget
:param ui_file: path to UI file to load (optional)
'''
super(BaseGUIWidget, self).__init__(parent)
if ui_file is not None:
uic.loadUi(ui_file, self)

假设我有类似的类用于 QFrameQMainWindowQGroupBox 等。

这允许我创建使用 UI 文件中的数据的 python 类,以及我在代码中手动添加的任何附加功能。本质上,我的 BaseGUIWidget 类就像是扩展由 UI 文件生成的类一样。应用程序中的许多功能都非常依赖于此行为。

但是,据我所知,PySide 的 QUIloader 没有类似的功能。它不是将 UI 文件的内容“填充”到你的类中,而是简单地在内部从 UI 文件构建一个小部件,然后返回它,然后你将它嵌入到你的小部件中,就像你想要的一样其他小部件., I.E:

class BaseGUIWidget(QWidget):
def __init__(self, parent = None, ui_file = None):
'''
:param parent: parent widget of this widget
:param ui_file: path to UI file to load (optional)
'''
super(BaseGUIWidget, self).__init__(parent)
self.setLayout(QVBoxLayout())
if ui_file is not None:
loader = QUILoader()
uifile = QFile(ui_file)
uifile.open(QFile.ReadOnly)
self.ui_widget = loader.load(ui_file, self)
self.layout().addWidget(self.ui_widget)
uifile.close()

这是一个相当大的差异。例如,如果您希望您的 UI 文件包含一个 QMainWindow 并且您的 python 类仍然是 QMainWindow 的扩展,因此它就像其他类一样,您d 以 QMainWindow 内的 QMainWindow 结束,这不是您想要的。这也意味着您必须执行 widget.ui_widget.XXX 才能访问由 UI 文件生成的小部件。

有没有办法让 PySide 的 uic 实现像 PyQt 的一样?

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com