1,程序解析
现在解析一下上节课中的程序,这段非常简易的程序可以用一句老话来形容 : 麻雀虽小五脏俱全。也就是说,程序虽然简单但是确实现了图形界面程序均有的功能。
# -*- coding: utf-8 -*-
"""第一个程序"""
from PyQt5.QtWidgets import QApplication, QWidget # 导入PyQt5部件
import sys
if __name__ == "__main__":
app = QApplication(sys.argv) # 建立application对象
qwidget = QWidget() # 建立窗体对象
qwidget.resize(400, 300) # 设置窗体大小
qwidget.setWindowTitle("我的第一个pyqt5程序") # 设置窗体标题
qwidget.show() # 显示窗体
sys.exit(app.exec()) # 运行程序
首先,介绍一下导入的包。
from PyQt5.QtWidgets import QApplication, QWidget # 导入PyQt5部件
import sys
这段代码表明我们引入了python的相关模块,这就包括了sys模块,以及PyQt5中的QtWidgets模块。
if __name__ == "__main__":
这个属于Python基础知识,如果写了这句话并将执行的语句放到这个判断语句的后面,那么只有在程序本身被执行的时候才能运行这个判断语句下面的语句,否则程序就被作为模块导入的时候就会执行。
app = QApplication(sys.argv) # 建立application对象
每个PyQt5应用程序必须创建一个应用程序对象。 sys.argv参数是来自命令行的参数列表。 Python脚本可以从shell运行。 写了这句话就能让我们的程序从命令行启动。
qwidget = QWidget() # 建立窗体对象
QWidget小部件是PyQt5中所有用户界面对象的基类。 我们提供了QWidget的默认构造函数。 默认构造函数没有父类。 没有父类口小部件称为窗口。
qwidget.resize(400, 300) # 设置窗体大小
resize()方法调整窗口小部件的大小。这里我们设定窗口的大小:宽400像素,高300像素。
qwidget.setWindowTitle("我的第一个pyqt5程序") # 设置窗体标题
这个方法顾名思义,就是设置窗口的标题。
qwidget.show() # 显示窗体
show()方法在屏幕上显示窗口小部件。 一个小部件首先在内存中创建,然后在屏幕上显示。
sys.exit(app.exec()) # 运行程序
最后,我们进入应用程序的主循环(main loop)。 事件处理从这一点开始。 主循环(main loop)从窗口系统接收事件并将它们分派到应用程序小部件。 如果我们调用exit()方法或者主窗口小部件被破坏,那么主循环(main loop)就会结束。
sys.exit()方法确保一个干净的退出。
exec_()方法有一个下划线。 这是因为exec是一个Python关键字。 因此,使用exec_()。
2,给程序添加一个图标
接下来呢,我们把这个窗口美化一下,增加一个图标。当然写法上调整一下,上面的代码基本上是按照面向过程来写的,下面开始我们采用面向对象的方式进行编码。
先欣赏一下源代码 :
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from PyQt5.QtGui import QIcon
############################################################################################
# 建立窗体对象
class MainFrame(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 600, 400)
# self.resize(600, 400) # 设置窗体大小
self.setWindowTitle("我与PyQt5有个约会!") # 设置窗体标题
self.setWindowIcon(QIcon('myico.ico'))
self.show() # 显示窗体
if __name__ == "__main__":
app = QApplication(sys.argv) # 建立application对象
mainframe = MainFrame()
sys.exit(app.exec())
程序的执行的结果如下:
我们可以看到窗口已经换成了谷歌浏览器chrome的logo了。
接下来我们对新出现的代码进行相应的解析。
from PyQt5.QtGui import QIcon
从PyQt5.QtGui中引入QIcon这个类,也是为了便于图标的设定。
class MainFrame(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 600, 400)
# self.resize(600, 400) # 设置窗体大小
self.setWindowTitle("我与PyQt5有个约会!") # 设置窗体标题
self.setWindowIcon(QIcon('myico.ico'))
self.show() # 显示窗体
很明显,我这里继承了QWidget这个基类,并自定义了一个名为Ico的新类。同时对这个Ico的新类进行了初始化。
需要注意的一点,我们要用QWidget中__init__的变量,就必须在子类MainFrame中显示调用:super().__init__()。__init __()方法是Python语言的初始化方法(构造函数)。
self.initUI()
程序的GUI界面用initUI()函数创建。
self.setGeometry(300, 300, 600, 400)
self.setWindowTitle("我与PyQt5有个约会!") # 设置窗体标题
self.setWindowIcon(QIcon('myico.ico'))
上面的三种方法都已经从QWidget类中继承的。 setGeometry()做了两件事情:它在屏幕上定位窗口并设置它的大小;前两个参数是窗口的x和y位置;第三个是宽度;第四个是窗口的高度。实际上,它在一个方法中组合了resize()和move()方法。 最后一个方法设置应用程序图标。 为此,我们创建了一个QIcon对象。 QIcon接收到我们要显示的图标的路径(和当前程序在同一个目录下)。
今天就到这里,下一篇文章再见。