python gui gif显示_PySimpleGUI(9)--显示 GIF 动画

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-28 17:44   11   0

v2-1934c3553fce44695f3d2c1225fbdf29_1440w.jpg?source=172ae18b

欢迎关注深入 Python 的专栏:

恍然大明白www.zhihu.com
v2-b6546a28845e426a25b971ce7fcab919_ipico.jpg

本文代码在此:

https://github.com/JiangChuanGo/examples/tree/master/PySimpleGUIDemos/showGIFgithub.com

虽然 PySimpleGUI 的定位是简单的 GUI 开发工具,但是也提供了在界面内播放动态图片的能力。

GIF

GIF 是一种常见的图片格式,它可以按帧保存一组图像序列。

v2-718b9689e1e6d1f16d6752d96fb9f3f2_b.jpg

如果这些图像之间保持一定的连续性,当快速在这些图像的时候,就看起来像是在播放 “视频”。卡通动画也是这样的原理。

播放 GIF 的问题就转换为,按照 GIF 帧序列,定时更新显示内容。

绘制静态图片

依然从最简单的开始,先绘制一张静态图片,你可以在这里下载到可用的 GIF 图:

https://github.com/PySimpleGUI/PySimpleGUI/tree/master/GIFsgithub.com

还是熟悉的套路,先设计 layout:

import 

UI 非常简单,分别有:

  • 开始、停止、退出 3 个按钮;
  • 一个 Image 用于显示;

这里使用 dots_wave.gif 文件。事件循环中可以只简单的处理退出事件,就可以看到一张静态图片。

实际上 dots_wave.gif 是动图,正如前面所说,GIF 文件包含成序列的一组图像,需要更新才能形成 “动态” 的感觉。

目前没有更新,显示的就只是 dots_wave.gif 的第一帧图像。

显示 GIF

PySimpleGUI 的 window.read 方法默认是阻塞的,显然我们需要定时执行更新 Image 的任务,所以 read 方法需要使用非阻塞版本,也就是要带 timeout 参数:

while 

这样每 10 毫秒就可以更新一次 Image。

可以通过 Image.UpdateAnimation 方法更新显示图像,两个关键参数:

  • filename,显示的图像,这里与 layout 定义时一致,就是我们要显示的 GIF 图 dots_wave.gif;
  • time_between_frames,GIF 切换帧的时间间隔,单位是毫秒,这里取 50。
img

最后,通过对 "Play"、"Stop" 按钮事件的响应,修改标识变量的状态,控制是否调用 UpdateAnimation 更新显示,就可以实现对播放的控制。

效果

v2-7e3dbc5d13cf44397c6ecdf32a2b8601_b.gif

关注公众号 “江川Go”,了解程序员的烧脑日常。

v2-ff3da0eccd8996a07e603647dd88990c_b.jpg
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP