08. 界面与业务逻辑分离设计
1. 多继承
import sys from PyQt5.QtWidgets import QWidget, QApplication from FormHello import Ui_Form class QmyWidget(QWidget,Ui_Form): def __init__(self, parent=None): # 调用父类的构造函数,创造QWidget窗体 super().__init__(parent) self.Lab = '多继承的QmyWidget' self.setupUi(self) # self是QWidget窗体,可作为参数传给setupUi self.label.setText(self.Lab) if __name__ == '__main__': app = QApplication(sys.argv) myWidget = QmyWidget() myWidget.show() myWidget.pushButton.setText('不关闭了') sys.exit(app.exec_())
- 定义QmyWdiget类继承QWidget和Ui_Form;这个类为窗体的业务逻辑类
- 用函数super()获取父类,执行父类构造函数:super().__init__(parent)
- 多继承时,使用super()得到的是第一个基类,这里是QWidget,所以执行super()后,self就是一个QWidget对象
- 调用setupUi()函数创造UI窗体:self.setupUi(self),self是一个QWidget对象作为参数传递给setupUi()函数
##############################################################################################
2. 单继承与界面独立封装
1 import sys 2 from PyQt5.QtWidgets import QWidget, QApplication 3 from FormHello import Ui_Form 4 5 6 class QmyWidget(QWidget): 7 def __init__(self, parent=None): 8 # 调用父类构造函数,创建QWidget窗体 9 super().__init__(parent) 10 # 创建ui对象 11 self.__ui = Ui_Form() 12 # 构造UI 13 self.__ui.setupUi(self) 14 self.Lab = '单继承的QmyWidget' 15 self.__ui.label.setText(self.Lab) 16 17 def setBtntext(self,aText): 18 self.__ui.pushButton.setText(aText) 19 20 21 if __name__ == '__main__': 22 app = QApplication(sys.argv) 23 myWidget = QmyWidget() 24 myWidget.show() 25 myWidget.setBtntext('间接设置') 26 sys.exit(app.exec_())
- QmyWidget只有一个基类QWidget
- QmyWidget构造函数中首先调用父类QWidget的构造函数,self就是一个QWidget对象
- 显示的创建Ui_Form类的私有属性self.__ui,self.__ui包含了UI窗体上的所有组件
- 不能直接访问私有属性,访问组件需要定义接口函数
浙公网安备 33010602011771号