2013-02-15 50 views
16

我已经使用了PyQt很长一段时间了,并且在使用它的整个过程中,都有一个非常一致的编程模式。如何使用PySide将.ui文件加载到python类上?

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

有什么办法可以在PySide中做类似的事情吗?我已经阅读了文档和示例,并且我能找到的最接近的东西是一个计算器示例,它将.ui文件预渲染为python代码,这是在PyQt中执行此操作的超级老方法(为什么要将它烧成python当你只能解析用户界面?)

+0

我总想这是更好地从应用程序启动整个解析步骤,使用具有动态loadUi更具开发便利性。 – jdi 2013-09-30 20:06:09

+0

@jdi“更好”是主观的。稍微快一点...也许...,这不像是不需要分析python ui代码,你只是用一种类型的解析代替另一种解析。 pyqt的主要优点之一是快速迭代开发工作流程。 PySide增加了另一个步骤,恕我直言。 – 2013-10-01 22:41:36

+0

我同意你的更正。我应该说它是“我个人认为它更直接”。而且我认为在动态加载中还有更多的解析。您首先必须解析并转换UI xml - > python代码,然后再构建这些对象。 – jdi 2013-10-02 02:26:32

回答

20

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

使用此https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8(塞巴斯蒂安·威斯纳原来是在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。

如果您还需要使用自定义的小部件(“促进” Qt设计师),看到这样的回答:https://stackoverflow.com/a/14877624/532513

+0

你好。 github的链接似乎破裂了。 – 2015-10-09 10:28:53

+0

感谢您的提醒!我已经提供了我自己修改后的pyside_dynamic.py版本作为要点,请参阅修改后的答案。 – 2015-10-09 13:42:08

相关问题