1 说明:

1.1 环境:python3.8,微软编辑器vscode,深度deepin-linux操作系统。

1.2 代码亲测,注释详细,通俗易懂,适合收藏和转发,慢慢分析,避免入坑。

1.3 锻炼python的解决问题的方法和思维。

2 plglet法:最佳

2.1 代码:

# 本代码名:plglet法.py

# 导出模块

import pyglet

# gif动画文件和本代码plglet法.py在同一个目录下,特色

ag_file = "boy.gif"

#特色

#animation = pyglet.resource.animation(ag_file)

#sprite = pyglet.sprite.Sprite(animation)

#等同于上面的2个赋值

sprite = pyglet.sprite.Sprite(pyglet.resource.animation(ag_file))

# 创建一个窗口并将其设置为图像大小,4倍大小,可自定义

win = pyglet.window.Window(width=4*sprite.width, height=4*sprite.height)

# 设置窗口背景颜色 = r, g, b, alpha

# 每个值从 0.0 到 1.0,这种赋值颜色法多用于gl的颜色定义

black=0,0,0,1

pyglet.gl.glClearColor(*black)

@win.event

def on_draw():

win.clear()

sprite.draw()

pyglet.app.run()

2.2 boy.gif

2.3 窗口显示效果

2.4 颜色定义知识拓展:

与openGL 中 glColor3f()函数 颜色设定类似,注意alpha值和“*”

glColor3f(0.0, 0.0, 0.0); --> 黑色

glColor3f(1.0, 0.0, 0.0); --> 红色

glColor3f(0.0, 1.0, 0.0); --> 绿色

glColor3f(0.0, 0.0, 1.0); --> 蓝色

glColor3f(1.0, 1.0, 0.0); --> 黄色

glColor3f(1.0, 0.0, 1.0); --> 品红色

glColor3f(0.0, 1.0, 1.0); --> 青色

glColor3f(1.0, 1.0, 1.0); --> 白色

3 pygame法,不推荐

3.1 代码一:不是最佳的显示gif的方法

import pygame,sys

pygame.init()

#窗口大小设置

screen = pygame.display.set_mode([640,480])

#背景颜色定义白色:255,255,255

#screen.fill([255,255,255])

black=0,0,0

screen.fill(black)

#这种方法gif不动的,注意图片目录和路径

boy = pygame.image.load("/home/xgj/Desktop/python显示gif/boy.gif")

screen.blit(boy,[50,50])

pygame.display.flip()

running = True

while running:

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

pygame.quit()

3.2 图

3.3 方法二:只是让图片动起来,而不是显示原有的gif的动画效果

#方法二,不是真正的显示gif,而是让图片上下左右移动

import sys, pygame

pygame.init()

size = width, height = 1000, 800

speed = [1, 1]

black = 0, 0, 0

screen = pygame.display.set_mode(size)

ball = pygame.image.load("/home/xgj/Desktop/python显示gif/boy.gif")

ballrect = ball.get_rect()

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT: sys.exit()

ballrect = ballrect.move(speed)

if ballrect.left < 0 or ballrect.right > width:

speed[0] = -speed[0]

if ballrect.top < 0 or ballrect.bottom > height:

speed[1] = -speed[1]

screen.fill(black)

screen.blit(ball, ballrect)

pygame.display.flip()

3.4 图

4 tkinter法,需要解帧

4.1 解帧法

from tkinter import *

import time

import os

root = Tk()

#---gif的动画设置和插入---

numIdx = 6 # gif的帧数

# 填充6帧内容到frames

frames = [PhotoImage(file='/home/xgj/Desktop/python显示gif/2.gif', format='gif -index %i' %(i)) for i in range(numIdx)]

# 定时器函数

def update(idx):

frame = frames[idx]

idx += 1 # 下一帧的序号:在0,1,2,3,4,5之间循环(共6帧)

label.configure(image=frame) # 显示当前帧的图片

root.after(100, update, idx%numIdx) # 0.1秒(100毫秒)之后继续执行定时器函数(update)

label = Label(root)

label.pack()

root.after(0, update, 0) # 立即启动定时器函数(update)

label = Label(root)

label.pack()

root.after(0, update, 0)

root.mainloop()

4.2 2.gif

4.3 效果图

4.4 注意对boy.gif,报错,不能解帧,怎么办呢?发现问题,解决问题。

查看有几帧?

gifidx.py代码

from PIL import Image

import os

gifFileName = '/home/xgj/Desktop/python显示gif/boy.gif'

#使用Image模块的open()方法打开gif动态图像时,默认是第一帧

im = Image.open(gifFileName)

pngDir = gifFileName[:-4]

#创建存放每帧图片的文件夹

os.mkdir(pngDir)

try:

while True:

#保存当前帧图片

current = im.tell()

im.save(pngDir+'/'+str(current)+'.png')

#获取下一帧图片

im.seek(current+1)

except EOFError:

pass

4.5 图

3张,就是3帧

4.6 将代码的numIdx = 6 # gif的帧数,修改为3,再将图片boy.gif修改,就能显示了,此处省略。

5 guizero法

5.1 代码

#from guizero import App, Picture, PushButton, info

from guizero import *

app = App()

#方法一

#anim = Picture(app, "2.gif") #默认大小

#可自定义显示gif的图的大小

#anim.width = 100

#anim.height = 100

#方法二,注意2.gif和本代码在一个路径的目录下,这是guizero的特色

button = PushButton(app, command=info, args=["button", "you pushed the image"], image="2.gif")

#button.width = 1000

#button.height = 800

app.display()

5.2 图

效果一般

小结,gif图片在python的GUI中显示,推荐pyglet法,tkinter法需要解帧,也不错;guizero法稍有欠缺,也可以做gif的按钮,pygame不适合。

自己整理,分享出来,希望大家喜欢,欢迎收藏和转发,慢慢分析代码和注释。

python显示gif图片报错_4种方法(plglet、tkinter、guizero、pygame)的GUI中显示gif相关推荐

  1. python googletrans_Python使用googletrans报错的解决方法

    问题 最近在工作中发现了一个问题,Python代码一直用着免费的Google翻译API插件googletrans,这两天突然就报错了: Traceback (most recent call last ...

  2. python 读取xlsx文件报错,解决方法 ( xlrd 2.0.1 仅支持 .xls 文件)

    一.问题: python读取xlsx文件报错,报错信息如下: 为什么会报错?那是因为xlrd 2.0.1 仅支持 .xls 文件. 二.解决方法: 1.确认自己安装的xlrd版本: 可以先用以下命令看 ...

  3. 华为obs python sdk 下载图片报错:NoSuchKey

    背景: 以前在使用华为obs 进行图片下载(也就是浏览器查看图片),是直接使用地址访问obs. 比如: endpoint: obs-example-domain.cn 图片名称: qcx%2F1%2F ...

  4. 【Python】buffering=0报错的解决方法

    报错代码: fw = open(filename, 'w', buffering=0) 原因: buffering=0表示一个字符一个字符地写入,貌似不支持'w'的方式写字符串,只能用'wb'的方法写 ...

  5. python显示gif图片报错_用Python制作在地图上模拟瘟疫扩散的Gif图

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  6. 关于python manage.py migrate报错的解决方法

    问题描述: Django .*需要MySQL 5.6或更高版本.它通过映射DateTimeField到打破了兼容性datetime(6). 在PyhCharm的命令行中执行python manage. ...

  7. 华为ensp报错40问题解决方法

    在使用华为ensp仿真软件的时候,对于路由器AR的启动经常会报错40和41 1.ensp以及辅助软件不兼容问题 (1)检查Vbox是否安装相对应版本,Vbox版本不兼容,ensp会出现报错41的情况, ...

  8. Web 之 html 如何显示隐藏Html元素的两种方法简单整理

    Web 之 html 如何显示隐藏Html元素的两种方法简单整理 目录 Web 之 html 如何显示隐藏Html元素的两种方法简单整理 一.简单介绍 二.实现原理 三.注意事项 四.代码示例 一.简 ...

  9. vue项目在IE中显示空白,报错:vuex requires a Promise polyfill in this browser

    问题描述 vue项目在非IE内核的浏览器中显示正常,在IE内核浏览器中报错,并显示空白.报错如下: SCRIPT5022:  [vuex] vuex requires a Promise polyfi ...

最新文章

  1. 嵌入式学习笔记之三 (uboot我来看)
  2. sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights)、计算融合模型的混淆矩阵、可视化混淆矩阵
  3. python数据分析常用包_python可视化数据分析常用图大集合(收藏)
  4. IDEA运行第一个Spring Boot应用程序
  5. 完全二叉树最小深度_树与二叉树递归c++
  6. 反向输出一个四位数c语言程序,将一个四位数反向输出
  7. 用excel数据写入html,如何使用epplus将我的html表格写入excel文件
  8. java.math.BigDecimal cannot be cast to java.lang.Integer
  9. mysql中完成登陆注册_Flask+MySql实现用户登录注册
  10. android 不压缩保存图片格式,Android图片处理——压缩、剪裁、圆角、保存
  11. 飞鸽传书2007绿色版下载
  12. 2021华科计算机考研专业课,2021考研 华中科技大学计算机考研科目
  13. Metricbeat监听容器CPU利用率,内存等使用情况,发送给ElasticSearch并展示在kibana
  14. 银行服务器linux系统,银行操作系统
  15. Maven的目标和阶段是什么,它们之间有什么区别?
  16. 代码 todo 忘记_永远不要忘记您的仓库项目经理tickgit的TODO评论
  17. 人工智能开发语言 python,python人工智能编程教程
  18. VBA 字典嵌套字典 + 数组
  19. 计算机技术预测蛋白质结构,蛋白质结构预测:生命科学的又一场竞争
  20. 100种乡村旅游盈利方式

热门文章

  1. python制作相册影集_最新的有趣开源,Python制作抖音特有的重影彩色图片!
  2. Verbatim字符串
  3. BZOJ4698 Sdoi2008 Sandy的卡片
  4. 计算机类软件工程与测绘类遥感专业的薪水,2018遥感科学与技术专业就业前景和就业方向分析...
  5. java nc接口开发_OA和NC系统集成接口开发方案.doc
  6. mysql errno 1146_Mysql学习MySQL复制出错 Last_SQL_Errno:1146的解决方法
  7. c语言输入12行怎么输入,c语言中,定义什么型别的变数能同时储存数字跟字元,怎么输入...
  8. winmerge 保存为html,使用WinMerge作为git的Merge工具
  9. 关于BIOS加载BOOT.S的经典解答
  10. 【蓝桥杯】2019年第十届蓝桥杯(个人赛) 大赛介绍、注意事项及赛后总结