使用 Qt 设计师文件的3种方式

使用 Qt 设计师设计的 .ui 界面文件是 XML 文件,有3种方式在 PyQt 中使用,本文将通过实例进行讲解。

使用 PyQt 中如何结合 Qt 设计师进行开发 中的例子。点击按钮修改标签的内容。

1. 直接使用ui文件

PyQt4的 ui 模块提供了加载 .ui 文件的功能,ui.uic.loadUi(uifile[, baseinstance=None]) 方法会返回一个 QWdiget 子类的实例。

代码如下(widget1.py):

# -*- coding: utf-8 -*-
from PyQt4 import QtGui, uic

class Widget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = uic.loadUi('widget.ui')
        self.ui.show()

        self.ui.pbHello.clicked.connect(self.sayHello)

    def sayHello(self):
        self.ui.lHello.setText("Hello PyQt4")

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    widget = Widget()
    sys.exit(app.exec_())

2. 转换后加载使用

先用pyuic4命令转让成 .py 文件,再通过 setupUi() 调用。和方法1类似,多了个转换过程。

先转换:

$ pyuic4 -o ui_widget.py widget.ui

代码如下(widget2.py):

# -*- coding: utf-8 -*-
from PyQt4 import QtGui
from ui_widget import Ui_Form

class Widget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)

        self.ui.pbHello.clicked.connect(self.sayHello)

    def sayHello(self):
        self.ui.lHello.setText("Hello PyQt4")

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    widget = Widget()
    widget.show()
    sys.exit(app.exec_())

3. 转换后通过多重继承使用

和方法2类似,但是写类的时候用多重继承的方式。

代码如下(widget3.py):

# -*- coding: utf-8 -*-
from PyQt4 import QtGui, QtCore
from ui_widget import Ui_Form

class Widget(QtGui.QWidget, Ui_Form):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)

    @QtCore.pyqtSignature("")
    def on_pbHello_clicked(self):
        self.lHello.setText('Hello PyQt4')

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    widget = Widget()
    widget.show()
    sys.exit(app.exec_())

完整代码下载:using-ui-in-3-ways.zip