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_())
View Code

 -  定义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_())
View Code

-  QmyWidget只有一个基类QWidget

-  QmyWidget构造函数中首先调用父类QWidget的构造函数,self就是一个QWidget对象

-  显示的创建Ui_Form类的私有属性self.__ui,self.__ui包含了UI窗体上的所有组件

-  不能直接访问私有属性,访问组件需要定义接口函数

posted @ 2020-11-28 16:01  GOgo学习  阅读(274)  评论(0)    收藏  举报