Python的Tkinter的旋转图像动画 [英] Python Tkinter rotate image animation
本文介绍了Python的Tkinter的旋转图像动画的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有我创建使用PIL再添加光象一个使用TKinter画布。图像显示了罚款。但是,我不能得到PIL旋转功能才能正常工作。这里是我的code:
#此工作正常
图像= Image.open('img.png')
canvas_image = ImageTk.PhotoImage(rotated_image)
canvas_object = canvas.create_image(30 + 10 * INT(步骤),250,图像= canvas_image)
canvas.pack() #此不起作用
canvas.delete(canvas_object)
rotated_image = image.rotate(1)
canvas_image = ImageTk.PhotoImage(rotated_image)
canvas_object = canvas.create_image(30 + 10 * INT(步骤),250,图像= canvas_image)
canvas.update()
但是,图像只是没有在这种情况下出现。我希望能够动画图像的旋转,但我不能连得旋转在所有的工作!任何建议都大大AP preciated。
编辑:校正时,旋转将不工作后它已经被添加到屏幕
解决方案
导入Tkinter的传统知识
从PIL进口ImageTk
从PIL进口图片类SimpleApp(对象):
高清__init __(自我,大师,文件名,** kwargs):
self.master =主
self.filename =文件名
self.canvas = tk.Canvas(主,宽度= 500,高度= 500)
self.canvas.pack() self.update = self.draw()。下一个
master.after(1,self.update) 高清画(个体经营):
图像= Image.open(self.filename)
角= 0
而真正的:
tkimage = ImageTk.PhotoImage(image.rotate(角度))
canvas_obj = self.canvas.create_image(
250,250,图像= tkimage)
self.master.after_idle(self.update)
产量
self.canvas.delete(canvas_obj)
角+ = 10
角度%= 360根= tk.Tk()
应用= SimpleApp(根,image.png)
root.mainloop()
I have a PhotoImage that I created using PIL and then added to a TKinter canvas. The image shows up fine. However, I can't get the PIL rotate function to work correctly. Here is my code:
#This works fine
image = Image.open('img.png')
canvas_image = ImageTk.PhotoImage(rotated_image)
canvas_object = canvas.create_image(30+10*int(steps),250, image=canvas_image)
canvas.pack()
#this does not work
canvas.delete(canvas_object)
rotated_image = image.rotate(1)
canvas_image = ImageTk.PhotoImage(rotated_image)
canvas_object = canvas.create_image(30+10*int(steps),250, image=canvas_image)
canvas.update()
However, the image just does not show up in this case. I want to be able to animate the rotation of an image, but I can't even get a rotation to work at all! Any suggestions are greatly appreciated.
Edit: correction, the rotation will not work after it's already been added to the screen
解决方案
import Tkinter as tk
from PIL import ImageTk
from PIL import Image
class SimpleApp(object):
def __init__(self, master, filename, **kwargs):
self.master = master
self.filename = filename
self.canvas = tk.Canvas(master, width=500, height=500)
self.canvas.pack()
self.update = self.draw().next
master.after(1, self.update)
def draw(self):
image = Image.open(self.filename)
angle = 0
while True:
tkimage = ImageTk.PhotoImage(image.rotate(angle))
canvas_obj = self.canvas.create_image(
250, 250, image=tkimage)
self.master.after_idle(self.update)
yield
self.canvas.delete(canvas_obj)
angle += 10
angle %= 360
root = tk.Tk()
app = SimpleApp(root, 'image.png')
root.mainloop()
这篇关于Python的Tkinter的旋转图像动画的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文