Как изменить и переместить изображение на холсте tkinter одновременно?
внешность функции Я пишу код, который показывает анимацию в виде Flipbook.
Поэтому этот код должен изменить изображение и переместить координату одновременно. Я написал код. Однако иногда анимация отстает.
Я снял видео анимации, а затем обнаружил проблему.
В моем коде программа сначала меняет координаты, а затем меняет картинку. На самом деле этот код практически не имеет проблем, но иногда он отстает, тогда он будет только перемещать картинку. И через некоторое время это изменит картину. Поэтому я предполагаю, что мне нужно использовать какую-то функцию, которая может изменить изображение и одновременно перемещать изображение. Есть ли способ понять это?
Вот мой код
import tkinter as tk
class App(object):
def GUI(self):
root=tk.Tk()
root.geometry("600x600")
self.pic001=tk.PhotoImage(file="picture001.png")
self.pic002=tk.PhotoImage(file="picture002.png")
self.canvas = tk.Canvas(bg="black", width=796, height=816)
self.canvas.place(x=0, y=0)
self.item=self.canvas.create_image(0, 0, image=self.pic001, anchor=tk.NW)
self.canvas.move(self.item,-51,10)
self.canvas.itemconfig(self.item, image = self.pic002)
root.mainloop()
app=App()
app.GUI()
1 ответ
Вот простой анимационный скрипт.
Я нарисовал 6 изображений, а затем скопировал 5 из них для отражения отскока.
Я рисую новое изображение каждый раз вместо того, чтобы перемещать изображение.
import tkinter as tk
from os import walk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry("600x300")
self.image_names = []
self.index_tracker = 0
self.location = 1
self.canvas = tk.Canvas(self, width=2000)
self.canvas.pack()
for(dirpath, dirnames, filenames) in walk('./Flip/'):
for name in filenames:
self.image_names.append(tk.PhotoImage(file="{}{}".format(dirpath, name)))
tk.Button(self, text='Start animation!', command=self.start_animation).pack()
def start_animation(self):
if self.location < 80:
self.canvas.delete('all')
if self.index_tracker < len(self.image_names):
self.canvas.create_image(self.location * 10, 75, image=self.image_names[self.index_tracker])
self.location += 1
self.index_tracker += 1
self.after(100, self.start_animation)
else:
self.index_tracker = 0
self.start_animation()
if __name__ == "__main__":
App().mainloop()
Вы можете получить файлы изображений для этой анимации на моем Github здесь.
Результаты: