跳至正文
View Categories

< 1 min read

    主要内容 #

  1. QTimer复合实践

完成效果 #

完成本节课程,能学会使用Qtimer定时器和Qpixmap控件实现将一系列图片展示为GIF动图效果。

本次程序中需要用到的一些图片及音频资源压缩包,点击下载

收获 #

学习完本节内容,我们会了解QTimer复合实践的具体步骤,实现控件间的信息传递等进阶操作,完成动图效果。

1.QTimer复合实践 #

在本复合实践中,首先在窗口应用程序中新增一个QLabel以及一个QTimer定时器进行倒计时,每次计时结束之后通过信号槽机制按顺序读取图片并显示在QLabel上。本例中计时器每次倒计时200毫秒,意味着每间隔0.2秒读取下一张图片,于是多张图片顺序读取并显示,构成gif效果。
以下是代码实现示例:

from PyQt5.QtWidgets import QWidget,  QApplication, QLabel
from PyQt5.QtCore import QTimer
from PyQt5.QtGui import QPixmap
import sys
import os

class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()


    def initUI(self):      
        self.lbl = QLabel(self)  # 创建一个QLabel对象
        self.lbl.setGeometry(100,100,300,300)  # 设置位置和大小,注意大小最好设置大一点,不然后面图片显示不全
        self.timer = QTimer(self)  # 创建一个定时器实例      
        self.timer.timeout.connect(self.showPic)  # 计时结束时,触发timeout超时信号,并连接到槽函数showPic
        self.timer.start(200)  # 启动计时器,并设置超时时间为200毫秒即0.2秒,代表着gif中相邻两帧间隔为0.2秒
        self.timer.setSingleShot(False)  # True表示只进行单次计时,False表示多次计时
        self.num = 0  # 记录目前应该读取的图片在piclist中的索引,初始值为0
        self.setGeometry(300, 300, 500, 500)
        self.setWindowTitle('QTimer')
        self.show()

    def showPic(self):  # 槽函数,用来在QLabel显示图片
        # 如果索引值self.num超过图片列表piclist的长度,代表所有的图片都读取完毕了
        if self.num >= len(piclist):   
            self.timer.stop()  # 计时器停止
            return
        # filepath 加上 pcilist中的文件名构成图片的完整读取路径
        pixmap = QPixmap(filepath+piclist[self.num])  # 创建一个QPixmap对象,读取文件夹中的图片
        self.lbl.setPixmap(pixmap)  # 将图片显示在QLabel上
        self.num += 1  # 更新索引值,每次+1
        

# 实际运行时根据你的储存位置更改此路径
filepath = 'D:\\Python_Tips\\Dashima\\pics\\gif\\'  # filepath 为图片的储存路径,注意末尾要加\\ 
piclist = os.listdir(filepath)  # os.listdir()函数可以读取路径下的所有文件名并存为列表piclist
app = QApplication(sys.argv)    # 创建应用程序
ex = Example()  # 创建窗口对象
sys.exit(app.exec_())   # 设置关闭窗口后结束进程

拓展练习:尝试更改计时器的超时时间,观察gif动图播放速度的变化。

小结 #

  • 学习了如何添加QTimer计时器控件。
  • 学习了如何将QTimer控件的信号关联到槽函数,然后槽函数进行处理。
  • 学习了如何用QTimer控件实现动图效果的原理和方法。
  • 习题 #

    1. 习题1:尝试用你自己喜欢的一系列图片生成gif动图。