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

v2-1934c3553fce44695f3d2c1225fbdf29_1440w.jpg?source=172ae18b

欢迎关注深入 Python 的专栏:

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

本文代码在此:

https://github.com/JiangChuanGo/examples/tree/master/PySimpleGUIDemos/showGIF​github.com

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

GIF

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

v2-718b9689e1e6d1f16d6752d96fb9f3f2_b.jpg

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

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

绘制静态图片

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

https://github.com/PySimpleGUI/PySimpleGUI/tree/master/GIFs​github.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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值