所以我有一个应用程序,我正在考虑从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)
假设我有类似的类,QFrame
,QMainWindow
,QGroupBox
,等等
这允许我创建python类,这些类使用UI文件中的数据,以及我在代码中手动添加的任何附加功能。本质上,我的BaseGUIWidget
类的作用就好像它在扩展UI文件生成的类。应用程序中的许多功能都非常依赖于这种行为。在
但是,据我所知,PySide的QUIloader
没有类似的功能。它不是将UI文件的内容“填充”到您的类中,而是从UI文件内部构建一个小部件,然后返回它,然后您将其嵌入到您的小部件中,就像您对任何其他小部件一样,例如:
这是一个很大的不同。例如,如果您希望UI文件包含QMainWindow
,而python类仍然是QMainWindow
的扩展,因此它的行为与其他类类似,那么您将在QMainWindow
内得到一个QMainWindow
,这不是您想要的。这也意味着您必须执行widget.ui_widget.XXX
来访问UI文件生成的小部件。在
有没有办法让PySide的uic实现像PyQt一样?在
其实我也在想同样的事情,就试着这样:
将uic包从PyQt4安装复制到PySide包(它的所有python模块,没有编译的库,因此不应该有任何不兼容)
将“PYA搜索”替换为“4”>
使用它:
它也适用于你描述的用例(uic.loadUi(ui_文件,self)):) 当然,并不能保证一切都能正常工作,但我很惊讶这次黑客攻击让它成功了。在
使用QtPy包
它自动检测使用的绑定(pyqt5或pyside2)
^{pr2}$相关问题 更多 >
编程相关推荐