前面学习了,面对对象编程,继承,有了一些理解。继续学习pyqt5
看到下面有了一些疑问。
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
class Example(QWidget)
Example继承了QWidget的所有遗产
__init__()初始化了父类的__init__(),下面一句self.initUI(),初始化本身的方法 initUI()
在initUI()方法中,self指的到底是谁????这是我的疑问。
self指的是class Example实例化的对象,在这里就是对象ex。
因为Example继承了QWidget的所有遗产,也就是ex也继承了QWidget的所有遗产
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))
这三个方法原本属于,QWidget,现在Example,也可以拥有,切可以增加其它的方法,比如 initUI()
重要的是,self指的是实例化后的对象本身。
自己又写了一个例子,帮自己理解一下
class A:
def __init__(self):
print("A")
def f(self):
print("f")
class B(A):
def __init__(self):
print("B")
super().__init__()
self.a()
self.f()
def a(self):
self.f()
if __name__ == '__main__':
a=B()
对clas B实例化 a=B(),初始化。
问题:
这是QT designer产生ui文件转换过来的文件
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(516, 396)
self.layoutWidget = QtWidgets.QWidget(Form)
self.layoutWidget.setGeometry(QtCore.QRect(10, 40, 320, 223))
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.textEdit = QtWidgets.QTextEdit(self.layoutWidget)
self.textEdit.setObjectName("textEdit")
self.gridLayout.addWidget(self.textEdit, 0, 0, 1, 4)
self.num_1 = QtWidgets.QPushButton(self.layoutWidget)
self.num_1.setObjectName("num_1")
self.gridLayout.addWidget(self.num_1, 1, 0, 1, 1)
self.num_2 = QtWidgets.QPushButton(self.layoutWidget)
self.num_2.setObjectName("num_2")
self.gridLayout.addWidget(self.num_2, 1, 1, 1, 1)
self.num_3 = QtWidgets.QPushButton(self.layoutWidget)
self.num_3.setObjectName("num_3")
self.gridLayout.addWidget(self.num_3, 1, 2, 1, 1)
self.num_4 = QtWidgets.QPushButton(self.layoutWidget)
self.num_4.setObjectName("num_4")
self.gridLayout.addWidget(self.num_4, 1, 3, 1, 1)
self.retranslateUi(Form)
self.num_2.clicked.connect(Form.n_2)
self.num_1.clicked.connect(Form.n_1)
self.num_3.clicked.connect(Form.n_3)
self.num_4.clicked.connect(Form.n_4)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.textEdit.setHtml(_translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
self.num_1.setText(_translate("Form", "1"))
self.num_2.setText(_translate("Form", "2"))
self.num_3.setText(_translate("Form", "3"))
self.num_4.setText(_translate("Form", "4"))
现在要来编写对应的槽函数,即
self.num_2.clicked.connect(Form.n_2)
self.num_1.clicked.connect(Form.n_1)
self.num_3.clicked.connect(Form.n_3)
self.num_4.clicked.connect(Form.n_4)
首先根据designer,Form,是一个QWidget类,在调用setupUi(self, Form)方法时,需要传入一个对象,属于QWidget类。
但这个类里面还得包括,自定义的四个方法,n_1,n_2,n_3,n_4。
这里可以使用继承,新建一个类aa,继承了两个类,QWidget,Ui_Form
class aa(QtWidgets.QWidget,Ui_Form):
def n_1(self):
self.textEdit.setText("1")
def n_2(self):
self.textEdit.setText("2")
def n_3(self):
self.textEdit.setText("3")
def n_4(self):
self.textEdit.setText("4")
现在,aa,相当强大不但拥有,QWidget和Ui_Form家族的所有财产,还有自己家的n_1,n_2,n_3,n_4
加入下面的代码,就能运行了。这是我误打误撞写的,虽然是对的,但还有疑问???????????
if __name__=="__main__":
import sys
app=QtWidgets.QApplication(sys.argv)
b=aa()
b.setupUi(b)
b.show()
sys.exit(app.exec_())
这句 b.setupUi(b) 传入的是它本身。让我有点意外,但想想也对,b是aa的实例化,也属于QWidget类。
希望有缘人给予解答,这样写,怎么就对了。