Python语言系统学习6:感受面向对象程序设计

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qingwufeiyang12346/article/details/101602385

从事嵌入式系统软硬件设计工作已有将尽20年的时间,在进行硬件目标板调试时,常需要上位机软件支持。在进行上位机软件程序的设计时,采用过VB、VB.net和C++等多种语言,偶然的机会发现Python,接触后,立刻感觉到它的强大,现在我的上位机软件编程只用Python。本系列教程将从基于硬件的上位机软件设计的角度着手,系统介绍Python语言,希望读者通过本系列教程的学习,能够对Python语言立刻学以致用,真正将所学知识应用到项目实践中。

开发环境:Visual Studio Code

操作系统:Microsoft Window 7

Python版本:3.7

参考教材:Python快速编程入门,黑马程序员,人民邮电出版社,2017年9月第1版

备注:教程仅适合初学者,高手请绕过。

 

一、引言

在开始正式讲解Python语言,我们先以一个实例感受一下面向对象的程序设计。回顾Python语言系统学习5:构建PyQt集成开发环境,我们完成一个简单的GUI界面的程序设计。我们使用Qt Designer建立GUI界面,然后将其编译成Python语言源码,再加入入口程序,最后运行,屏幕上显示了一个简单的GUI界面。

不过上述的设计方法是存在问题的,如果我们在Qt Designer中对界面进行了重新修改,再编译时,我们原先手动加入的程序都会被覆盖,我们还需重新加入,非常繁琐;而且,当我们的界面设计的比较复杂时,Ui_MainWindow.py里面的程序就会很庞杂,此时在加入自身的程序,就会使得整个程序异常的凌乱,较难维护。

如何解决上述问题呢?这就需要面向对象程序设计了。面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。通过上述分析,我们就可以得出一个新的构建GUI界面的解决方法,那就是把Ui_MainWindow当作父类,自己再建立一个类并继承于Ui_MainWindow,这样我们就可以把自己需要控制的逻辑写在自己的类里,而Ui_MainWindow用Qt Designer生成即可。
 

二、设计步骤

1、在硬盘上建立文件夹,并设置文件夹的名称为ex03。

2、启动Visual Studio Code,打开该文件夹。

3、在”资源管理器“面板中,点击右键,在弹出的快捷菜单中选择”PYQT:New Form“。

4、在Qt Designer应用程序中,点击new按钮,如下图所示,建立新的Form。

5、在接下来弹出的对话框中,我们选择Main Window,然后点击Create按钮进行建立。

6、移除菜单栏。

7、移除状态栏。

8、给控件命名。

9、给出主窗体名。

10、保存。

11、编译主窗体。

12、新建application.py。

13、在application.py中加入下列程序。

# 系统包
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
# 项目包
from Ui_MainWindow import Ui_MainWindow
 
class CMainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent = None):
        super(CMainWindow, self).__init__(parent)
        self.setupUi(self)
 
        # 主窗体设置
        self.show()
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = CMainWindow()
    sys.exit(app.exec_()) 

14、运行,看下效果。

15、回到Qt Designer编辑信号和槽。

16、将button信号的槽设置为主窗体。

17、点击Edit,加入槽。

18、点击“+”,加入槽。

19、将槽的名字设置为Add。

20、将butAdd信号的槽设置为Add。

21、重新对MainWindow进行保存。

22、重新编译。

23、在程序中,加入Add函数,为了完整起见,将application.py的所有代码贴出,以供参考。

# 系统包
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
# 项目包
from Ui_MainWindow import Ui_MainWindow
 
class CMainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent = None):
        super(CMainWindow, self).__init__(parent)
        self.setupUi(self)
 
        # 主窗体设置
        self.show()

    def Add(self):
        number1 = int(self.txtNumber1.text())
        number2 = int(self.txtNumber2.text())
        number3 = number1 + number2
        self.txtResult.setText(str(number3))
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = CMainWindow()
    sys.exit(app.exec_()) 

24、运行效果。

三、注解

1、import sys

输入sys模块,主要用于启动时进行参数传递,PyQt5的QApplication可以接收系统参数。

2、from PyQt5 import QtCore, QtGui, QtWidgets

输入QtCore、QtGui和QtWidgets模块,这样我们在后面的程序中就可以直接引用QtCore、QtGui和QtWidgets了。

3、if __name__ == '__main__':

如果是直接调用该程序就执行后续的语句,如果是模块调用该程序,就不执行后续的语句。这种写法主要用于模块的测试,我们把模块和测试语句写在一起,如果是测试就执行测试语句,如果是模块调用,就不执行后续语句。

4、app = QtWidgets.QApplication(sys.argv)

建立QApplicaion对象。

5、sys.exit(app.exec_())

执行事件循环,至此程序就运行起来了。当主窗体销毁的时候(例如我们点击了主窗体右上角的关闭按钮),该函数将返回0。正好被sys.exit函数接收,程序退出。

任何问题,只需在此文章的评论处留言即可,我将尽力解答,不要试图采用其它的联系方式,我一概不理会。

原创性文章,转载请注明出处CSDN:http://blog.csdn.net/qingwufeiyang12346。

 

 


 

猜你喜欢

转载自blog.csdn.net/qingwufeiyang12346/article/details/101602385