Как создать движущийся изменяющийся анимирующий gif в tkinter, Python
Я столкнулся с проблемой при создании изменяющейся анимации в python 3, tkinter. Я пытался создать изменяющуюся gif-анимацию плеера, когда обнаружил, что анимация не меняется, когда я нажимаю различные клавиши, которые были определены ранее. Ошибка заключается в том, что фреймы не определены, и я не знаю, как определить фреймы без их вмешательства
Вот мой код:
from tkinter import * import os import time root = Tk() LEFT_CHAR = input('LEFT BUTTON: ') RIGHT_CHAR = input('RIGHT BUTTON: ') UP_CHAR = input('UP BUTTON: ') DOWN_CHAR = input('DOWN BUTTON: ') ATK_CHAR = input('ATTACK BUTTON: ') movespeed = 20 canvasH = 900 canvasW = 1200 animspdIDLE = 300 animspdATK = 300 animspdLEFT = 300 animspdRIGHT = 300 animspdUP = 300 animspdDOWN = 300 framerangeIDLE = 2 framerangeATK = 2 framerangeLEFT = 2 framerangeRIGHT = 2 framerangeUP = 2 framerangeDOWN = 2 def animcontrollermethod(event): if event.char == LEFT_CHAR: frames = [PhotoImage(file =(os.path.expanduser("~/Desktop/DaQueenLEFT.gif")),format = 'gif -index %i' % (i)) for i in range(framerangeLEFT)] currentframelength = framerangeLEFT animspdcurrent = animspdLEFT elif event.char == RIGHT_CHAR: frames = [PhotoImage(file=(os.path.expanduser("~/Desktop/DaQueenRIGHT.gif")),format = 'gif -index %i' % (i)) for i in range(framerangeRIGHT)] currentframelength = framerangeRIGHT animspdcurrent = animspdRIGHT elif event.char == UP_CHAR: frames = [PhotoImage(file=(os.path.expanduser("~/Desktop/DaQueenUP.gif")),format = 'gif -index %i' (i)) for i in range(framerangeUP)] currentframelength = framerangeUP animspdcurrent = animspdUP elif event.char == DOWN_CHAR: frames = [PhotoImage(file=(os.path.expanduser("~/Desktop/DaQueenDOWN.gif")),format = 'gif -index %i'(i)) for i in range(framerangeDOWN)] currentframelength = framerangeDOWN animspdcurrent = animspdDOWN elif event.char == ATK_CHAR: frames = [PhotoImage(file=(os.path.expanduser("~/Desktop/DaQueenATK.gif")),format = 'gif -index %i' % (i)) for i in range(framerangeATK)] currentframelength = framerangeATK animspdcurrent = animspdATK else: frames = [PhotoImage(file=(os.path.expanduser("~/Desktop/DaQueenIDLE.gif")),format = 'gif -index %i'% (i)) for i in range(framerangeIDLE)] currentframelength = framerangeIDLE animspdcurrent = animspdIDLE def move(event): if event.char == UP_CHAR: c.move(character, 0, -movespeed) elif event.char == DOWN_CHAR: c.move(character, 0, movespeed) elif event.char == LEFT_CHAR: c.move(character, -movespeed, 0) elif event.char == RIGHT_CHAR: c.move(character, movespeed, 0) c = Canvas(root,width = canvasW, height = canvasH) c.bind("<KeyPress>",animcontrollermethod) c.bind('<KeyPress>',move) c.pack() c.focus_set() def update(ind): frame = frames[ind] ind += 1 if ind >= currentframelength: ind = 0 c.itemconfig(character, image=frame) root.after(animspdcurrent, update, ind) character = c.create_image((canvasW/2,canvasH/2), image=frames[0]) root.after(0, update, 0) root.update() root.mainloop()
EDIT: этот код вызывает ошибку, говоря, что фреймы не определены. Как я могу определить кадры, не вмешиваясь в них и не показывая ни одной анимации? Моя цель-создать сценарий так, чтобы при нажатии определенной клавиши анимация менялась в зависимости от того, что я нажал, и двигалась в соответствующем направлении.
Спасибо Вам за все!
Я создал этот вопрос на "StackOverflow"
но никто еще не ответил. Для тех кто заинтересован вот ссылка:
python - создание изменяющегося изображения/gif в tkinter, которое может перемещаться с помощью PhotoImage (без PIL) [без ответа] - переполнение стека[^]
Что я уже пробовал:
Я попытался отладить свой код, я потратил 2 дня, пытаясь выяснить, что не работает, проверил имена файлов и нашел решение, которое работает. То, что я считал правдоподобным решением, никогда не кажется решением, поэтому я обратился к интернету, чтобы помочь мне.