如何将.ui文件加载到PySide的Python类中?
我用PyQt已经有一段时间了,在这段时间里,我发现了一种比较固定的编程模式。
- 先用Qt Designer创建一个.ui文件。
- 然后为你在.ui文件中创建的控件写一个同类型的Python类。
- 在初始化这个Python类的时候,使用uic动态加载.ui文件到这个类里。
那么在PySide中有没有类似的方法呢?我看过文档和示例,找到的最接近的例子是一个计算器示例,它把.ui文件预先转换成了Python代码,这其实是PyQt中很老旧的做法(为什么要把它转换成Python代码呢,直接解析.ui文件不就行了吗?)
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设计的界面。
如果你还需要使用自定义的控件(在Qt Designer中叫“提升到”),可以看看这个回答: https://stackoverflow.com/a/14877624/532513