python显示gif图片报错_4种方法(plglet、tkinter、guizero、pygame)的GUI中显示gif
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相关推荐
- python googletrans_Python使用googletrans报错的解决方法
问题 最近在工作中发现了一个问题,Python代码一直用着免费的Google翻译API插件googletrans,这两天突然就报错了: Traceback (most recent call last ...
- python 读取xlsx文件报错,解决方法 ( xlrd 2.0.1 仅支持 .xls 文件)
一.问题: python读取xlsx文件报错,报错信息如下: 为什么会报错?那是因为xlrd 2.0.1 仅支持 .xls 文件. 二.解决方法: 1.确认自己安装的xlrd版本: 可以先用以下命令看 ...
- 华为obs python sdk 下载图片报错:NoSuchKey
背景: 以前在使用华为obs 进行图片下载(也就是浏览器查看图片),是直接使用地址访问obs. 比如: endpoint: obs-example-domain.cn 图片名称: qcx%2F1%2F ...
- 【Python】buffering=0报错的解决方法
报错代码: fw = open(filename, 'w', buffering=0) 原因: buffering=0表示一个字符一个字符地写入,貌似不支持'w'的方式写字符串,只能用'wb'的方法写 ...
- python显示gif图片报错_用Python制作在地图上模拟瘟疫扩散的Gif图
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 关于python manage.py migrate报错的解决方法
问题描述: Django .*需要MySQL 5.6或更高版本.它通过映射DateTimeField到打破了兼容性datetime(6). 在PyhCharm的命令行中执行python manage. ...
- 华为ensp报错40问题解决方法
在使用华为ensp仿真软件的时候,对于路由器AR的启动经常会报错40和41 1.ensp以及辅助软件不兼容问题 (1)检查Vbox是否安装相对应版本,Vbox版本不兼容,ensp会出现报错41的情况, ...
- Web 之 html 如何显示隐藏Html元素的两种方法简单整理
Web 之 html 如何显示隐藏Html元素的两种方法简单整理 目录 Web 之 html 如何显示隐藏Html元素的两种方法简单整理 一.简单介绍 二.实现原理 三.注意事项 四.代码示例 一.简 ...
- vue项目在IE中显示空白,报错:vuex requires a Promise polyfill in this browser
问题描述 vue项目在非IE内核的浏览器中显示正常,在IE内核浏览器中报错,并显示空白.报错如下: SCRIPT5022: [vuex] vuex requires a Promise polyfi ...
最新文章
- 嵌入式学习笔记之三 (uboot我来看)
- sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights)、计算融合模型的混淆矩阵、可视化混淆矩阵
- python数据分析常用包_python可视化数据分析常用图大集合(收藏)
- IDEA运行第一个Spring Boot应用程序
- 完全二叉树最小深度_树与二叉树递归c++
- 反向输出一个四位数c语言程序,将一个四位数反向输出
- 用excel数据写入html,如何使用epplus将我的html表格写入excel文件
- java.math.BigDecimal cannot be cast to java.lang.Integer
- mysql中完成登陆注册_Flask+MySql实现用户登录注册
- android 不压缩保存图片格式,Android图片处理——压缩、剪裁、圆角、保存
- 飞鸽传书2007绿色版下载
- 2021华科计算机考研专业课,2021考研 华中科技大学计算机考研科目
- Metricbeat监听容器CPU利用率,内存等使用情况,发送给ElasticSearch并展示在kibana
- 银行服务器linux系统,银行操作系统
- Maven的目标和阶段是什么,它们之间有什么区别?
- 代码 todo 忘记_永远不要忘记您的仓库项目经理tickgit的TODO评论
- 人工智能开发语言 python,python人工智能编程教程
- VBA 字典嵌套字典 + 数组
- 计算机技术预测蛋白质结构,蛋白质结构预测:生命科学的又一场竞争
- 100种乡村旅游盈利方式
热门文章
- python制作相册影集_最新的有趣开源,Python制作抖音特有的重影彩色图片!
- Verbatim字符串
- BZOJ4698 Sdoi2008 Sandy的卡片
- 计算机类软件工程与测绘类遥感专业的薪水,2018遥感科学与技术专业就业前景和就业方向分析...
- java nc接口开发_OA和NC系统集成接口开发方案.doc
- mysql errno 1146_Mysql学习MySQL复制出错 Last_SQL_Errno:1146的解决方法
- c语言输入12行怎么输入,c语言中,定义什么型别的变数能同时储存数字跟字元,怎么输入...
- winmerge 保存为html,使用WinMerge作为git的Merge工具
- 关于BIOS加载BOOT.S的经典解答
- 【蓝桥杯】2019年第十届蓝桥杯(个人赛) 大赛介绍、注意事项及赛后总结