Python的Tkinter的旋转图像动画 [英] Python Tkinter rotate image animation

查看:5131
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆