对于 PyQt,Qt Designer 的主要目的是创建应用程序的主要 GUI 结构。它只允许修改任何给定小部件的可用属性的子集,并且不能用于编写应用程序的主要逻辑。
相反,我们的想法是从 Qt Designer 创建的 ui 文件生成一个 python 模块,然后将其导入您的应用程序,您可以在其中执行剩余的设置代码、连接信号、编写所有事件处理程序等。
假设您使用 Qt Designer 创建了一个ui 文件并将其命名为mainwindow.ui。
然后你会像这样生成 python 模块:
pyuic4 -o mainwindow_ui.py mainwindow.ui
接下来,您将编写一个单独的 main.py 脚本,从生成的模块中导入 GUI 类,并根据需要创建它们的实例。
所以你的main.py 看起来像这样:
from PyQt4 import QtCore, QtGui
from mainwindow_ui import Ui_MainWindow
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
header = self.tableWidget.horizontalHeader()
header.setResizeMode(QtGui.QHeaderView.ResizeToContents)
...
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
此处的基类必须与 Qt Designer 中的顶级小部件相同(即通常是 QMainWindow、QDialog 或 QWidget)。此外,顶级小部件的objectName 属性用于生成导入的GUI 类的类名(前面带有“Ui_”)。上面的例子假设它被设置为“MainWindow”。
所有其他小部件的objectName 属性将成为MainWindow 类的属性,以便可以在其余代码中轻松访问它们。因此,务必始终将 objectName 属性设置为描述性名称(即不是“pushButton_1”、“pushButton_2”等)。