[英]Pysimplegui use gifs in graph
Im trying to use gifs in my pysimplegui graph, but the gif dont move, there is any way to fix that?我试图在我的 pysimplegui 图中使用 gif,但是 gif 不动,有什么办法可以解决这个问题? I saw that there is a way to update animations, but i cant grab the graph image to update it, so what can i do?我看到有一种更新动画的方法,但是我无法抓取图形图像来更新它,我该怎么办? Also my screen read isnt blocking anything我的屏幕阅读也没有阻止任何东西
def criapersonagem(x,y):
global local_personagem
global personagem
personagem = graph.draw_image(filename='personagemgif.gif',
data=None,
location=(x, y))
criarpersonagem(90,60)
thats how i created the image in the graph这就是我在图表中创建图像的方式
There're lot of frames in a GIF image, for animation, you have to get each frame shown as time passed. GIF 图像中有很多帧,对于 animation,您必须随着时间的推移显示每一帧。
Here's example to show how I do it.这是展示我如何做到这一点的示例。 Keyboard control, <Left><Right><Up><Down>
, also work.键盘控制<Left><Right><Up><Down>
也可以使用。 Remember to use your GIF file in code.请记住在代码中使用您的 GIF 文件。
import ctypes
import platform
import threading
from io import BytesIO
from time import sleep
from PIL import Image
import PySimpleGUI as sg
def image_to_data(im):
with BytesIO() as output:
im.save(output, format="PNG")
data = output.getvalue()
return data
def process_thread():
global index
while True:
sleep(0.01)
index = (index + 1) % frames
window.write_event_value('Animation', index)
if platform.system() == "Windows":
if platform.release() == "7":
ctypes.windll.user32.SetProcessDPIAware()
elif platform.release() == "8" or platform.release() == "10":
ctypes.windll.shcore.SetProcessDpiAwareness(1)
im = Image.open("D:/1.gif")
width, height = im.size
frames = im.n_frames
graph_width, graph_height = size = (640, 640)
layout = [[sg.Graph(size, (0, 0), size, background_color='green', key='GRAPH')]]
window = sg.Window("Animation", layout, return_keyboard_events=True, finalize=True)
graph = window['GRAPH']
index = 0
im.seek(index)
data = image_to_data(im)
x, y = location = (graph_width//2-width//2, height)
item = graph.draw_image(data=data, location=location)
step = 20
thread = threading.Thread(target=process_thread, daemon=True)
thread.start()
while True:
event, values = window.read(timeout=50)
if event == sg.WINDOW_CLOSED:
break
elif event == 'Animation':
im.seek(index)
data = image_to_data(im)
item_new = graph.draw_image(data=data, location=location)
graph.delete_figure(item)
item = item_new
elif event == "Left:37":
x = x - step if x >= step else x
location = (x, y)
elif event == "Right:39":
x = x + step if x <= graph_width - width - step else x
location = (x, y)
elif event == "Up:38":
y = y + step if y <= graph_height - step else y
location = (x, y)
elif event == "Down:40":
y = y - step if y >= height + step else y
location = (x, y)
window.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.