下面来分析一下Qt Designer生成的源码。
Qt Designer制作的图形界面为
生成的代码如下
- from PyQt5 import QtCore, QtGui, QtWidgets
-
-
- class Ui_Form(object):
- def setupUi(self, Form):
- Form.setObjectName("Form")
- Form.resize(400, 300)
- self.quitButton = QtWidgets.QPushButton(Form)
- self.quitButton.setGeometry(QtCore.QRect(280, 240, 75, 23))
- self.quitButton.setObjectName("quitButton")
-
-
- self.retranslateUi(Form)
- QtCore.QMetaObject.connectSlotsByName(Form)
-
-
- def retranslateUi(self, Form):
- _translate = QtCore.QCoreApplication.translate
- Form.setWindowTitle(_translate("Form", "Test"))
- self.quitButton.setText(_translate("Form", "Quit"))
现在运行这段代码,窗口是不会出现的。如何使窗口出现呢?下面需要添加一段代码
- if __name__=="__main__":
- import sys
- app=QtWidgets.QApplication(sys.argv)
- widget=QtWidgets.QWidget()
- ui=Ui_Form()
- ui.setupUi(widget)
- widget.show()
- sys.exit(app.exec_())
因为Qt Designer默认继承的object类,不提供show()显示方法,所以我们生成一个QWidget对象来重载我们设计的Ui_Form类,达到显示效果。
新建一个文件,导入我们设计的untitled .py文件,实现代码与界面分离。
- from PyQt5 import QtWidgets
- from untitled import Ui_Form
-
- class mywindow(QtWidgets.QWidget):
- def __init__(self):
- super(mywindow,self).__init__()
- self.new=Ui_Form()
- self.new.setupUi(self)
-
- if __name__=="__main__":
- import sys
-
- app=QtWidgets.QApplication(sys.argv)
- myshow=mywindow()
- myshow.show()
- sys.exit(app.exec_())
直接继承界面类
- from PyQt5 import QtWidgets
- from untitled import Ui_Form
-
- class mywindow(QtWidgets.QWidget,Ui_Form):
- def __init__(self):
- super(mywindow,self).__init__()
- self.setupUi(self)
-
- if __name__=="__main__":
- import sys
-
- app=QtWidgets.QApplication(sys.argv)
- myshow=mywindow()
- myshow.show()
- sys.exit(app.exec_())