可以让PySide的QUIloader像PyQt的uic.loadUi一样工作吗?

2024-10-01 07:25:17 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个应用程序,我正在考虑从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,等等

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

但是,据我所知,PySide的QUIloader没有类似的功能。它不是将UI文件的内容“填充”到您的类中,而是从UI文件内部构建一个小部件,然后返回它,然后您将其嵌入到您的小部件中,就像您对任何其他小部件一样,例如:

^{pr2}$

这是一个很大的不同。例如,如果您希望UI文件包含QMainWindow,而python类仍然是QMainWindow的扩展,因此它的行为与其他类类似,那么您将在QMainWindow内得到一个QMainWindow,这不是您想要的。这也意味着您必须执行widget.ui_widget.XXX来访问UI文件生成的小部件。在

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


Tags: 文件self功能none应用程序uiinit部件
2条回答

其实我也在想同样的事情,就试着这样:

  1. 将uic包从PyQt4安装复制到PySide包(它的所有python模块,没有编译的库,因此不应该有任何不兼容)

  2. 将“PYA搜索”替换为“

  3. 使用它:

    from PySide import uic
    
    w = uic.loadUi("mywidget.ui")
    w.show()
    

它也适用于你描述的用例(uic.loadUi(ui_文件,self)):) 当然,并不能保证一切都能正常工作,但我很惊讶这次黑客攻击让它成功了。在

使用QtPy包

pip3 install QtPy

它自动检测使用的绑定(pyqt5或pyside2)

^{pr2}$

相关问题 更多 >