首页 > 技术文章 > (1)pyqt5--->fristwindow(代码结构)

hhm-master 2020-12-12 15:22 原文

GitHub连接:
本专栏所有源代码的GitHub直通车

关于pyqt5的特点以及和QT5的联系和区别就不讲了,只有专业开发的大佬可能才会说的清楚一点

首先需要先下载PYQT5模块

用的是镜像网下载的,网速不好的时候需要在后面设置一下timeout,不然很有可能下载失败(因为包比较大)

pip install  pyqt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

代码

from PyQt5 import QtWidgets##从 PyQt 库导入 QtWidget 通用窗口类

import sys

class mywindow(QtWidgets.QWidget):#继承 QtWidgets.QWidget 类方法
    def __init__(self):
        super(mywindow,self).__init__()


def maingui():
    app = QtWidgets.QApplication(sys.argv)##pyqt 窗口必须在 QApplication 方法中使用
    window = mywindow()#实例化对象
    window.show()#显示窗口
    sys.exit(app.exec_())#启动事件循环

if __name__ == "__main__":
    print("haoming Hu welcome!")
    maingui()

我这里是直接使用了常用的面向对象编程的方式,其实在学习QT的时候,最先让人迷惑的一个问题就是QT的类,因为QT的类实在是太多了,但是也是有规律的,而且还要理解这些类之间的继承关系以及继承方式,很多时候都是使用到了多态。

#从 PyQt 库导入 QtWidget 通用窗口类和sys模块

from PyQt5 import QtWidgets
import sys

maingui()这个可以放在__main__下面执行,我习惯是把它写成一个函数的形式,到现在为止,qt5的编程方式和tkinter都非常的相似。

接下来是重新写一个类,类里面需要继承QtWidgets.QWidge类方法,在自己新建类的__init__函数中需要进行初始化,以前学的super。
这个的__init__函数相当于C++类里面的构造函数,也就是说当我用这个类去实例化一个对象的时候,这个对象会自动完成的一些初始化的工作。
关于super:
菜鸟教程是这样说的:
在这里插入图片描述
C语言中文网的解释是:

Python 中子类会继承父类所有的类属性和类方法。严格来说,类的构造方法其实就是实例方法,因此毫无疑问,父类的构造方法,子类同样会继承。
但我们知道,Python 是一门支持多继承的面向对象编程语言,如果子类继承的多个父类中包含同名的类实例方法,则子类对象在调用该方法时,会优先选择排在最前面的父类中的实例方法。显然,构造方法也是如此。

我理解就是如果自己有构造函数,也继承了父类的构造函数,这个时候应该会有一个调用优先级。在这里我不是很明白,这个我就是把它当成一个格式,照着写而已。

  super(mywindow,self).__init__()#应该是调用了父类的构造方法
class mywindow(QtWidgets.QWidget):#继承 QtWidgets.QWidget 类方法
    def __init__(self):
        super(mywindow,self).__init__()

程序框架:

 app = QtWidgets.QApplication(sys.argv)##pyqt 窗口必须在 QApplication 方法中使用
    window = mywindow()#实例化对象  mywindow是自己新建的类,继承于QtWidgets.QWidget
    window.show()#显示窗口
    sys.exit(app.exec_())#启动事件循环

这些必要性的东西就不解释了,在这个框架里面,我们关心的东西是用我们自定义类实例化出来的对象,我们操作的对象也是这个实例化对象。

补充:对 name == “main”:的理解 对于JAVA、C++、C的程序来说,程序的入口就是mian函数。python
作为一种解释性的脚本语言,Python代码是从模块顶行运行的。

一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。
if name == ‘main’: 的作用就是控制这两种情况执行代码的过程,在 if name == ‘main’:
下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。

程序运行结果:
在这里插入图片描述

推荐阅读