如何使用PySide将.ui文件加载到Python类中?

19

我使用PyQt已经有一段时间了,整个时间里,都有一种相当一致的编程模式。

  1. 使用Qt Designer创建一个 .ui 文件。
  2. 创建一个与在 .ui 文件中创建的小部件相同类型的 python 类。
  3. 在初始化 python 类时,使用uic将 .ui 文件动态加载到类中。

在PySide中是否有类似的方法?我已经阅读了文档和示例,找到的最接近的是一个计算器示例,该示例将 .ui 文件预渲染为python代码,这是在PyQt中实现的一种超级老的方式(为什么要将其烘烤成python,而不是解析UI文件呢?)


我一直认为从应用程序启动中删除整个解析步骤更好,而动态加载UI更多是开发方便。 - jdi
@jdi “更好”是主观的。或许会稍微快一点……但 Python UI 代码也需要被解析,你只是将一种解析方式替换为另一种而已。PyQt 的一个主要优点是快速迭代开发工作流程。在我看来,PySide 增加了另一个步骤,这是倒退的。 - Brendan Abel
我同意你的更正。我应该把它表述为“就我个人而言,我发现这更加简单明了”。而且我认为在动态加载中涉及到更多的解析。首先,你必须解析和转换UI xml -> Python代码,然后再基于此构建对象。 - jdi
1个回答

28

我正在使用PySide来做这件事。 :)

你可以使用这个https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8 (原作者Sebastian Wiesner的版本在https://github.com/lunaryorn/snippets/blob/master/qt4/designer/pyside_dynamic.py,但已经消失) - 它会覆盖PySide.QtUiTools.QUiLoader并提供新的loadUi()方法,以便你可以做到这一点:

class MyMainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        loadUi('mainwindow.ui', self)
当你实例化MyMainWindow时,它将具有使用Qt Designer设计的UI。
如果你还需要使用自定义小部件("Promote To"在Qt Designer中),请参考此答案:https://dev59.com/N2rWa4cB1Zd3GeqP80BV#14877624

1
你好。链接到Github的网址似乎已经失效了。 - Dan Niero
谢谢提醒!我已经将我自己修改过的pyside_dynamic.py版本发布在gist上了,请查看修改后的答案。 - Charl Botha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接