如何更新Tkinter中不同位置的图像

时间:2014-10-08 13:29:25

标签: python image tkinter photoimage

我正在尝试使用paste(im, box=(4-tuple))方法更新在Tkinter(python)窗口中创建的Label中显示的图像。

以下代码是一个显示我正在做的事情的最小例子。背景是现有图像,蒙版是要粘贴到现有图像上的图像。默认情况下,掩码将在现有图像的左上角更新。

通过向box方法添加paste参数,我希望将掩码移到其他位置。在这个例子中,我为box=(40,40,90,90)参数尝试了box

from Tkinter import *
import Image, ImageTk

root = Tk()

background_Image = Image.new("RGB",(500,500), (255,0,255,255))
background_Tk = ImageTk.PhotoImage(background_Image)
mask = Image.new('RGBX', (50,50), color=(255,255,255,0))

p1 = Label(root, image=background_Tk)
p1.pack()

background_Tk.paste(mask, box=(40,40,90,90))

root.mainloop()

图像已更新,但不在我想要的位置。它仍然出现在背景的左上角。在为box参数尝试了很多可能的坐标组合后,我仍然无法更改掩码的位置。在这种情况下,我没有准确显示面具的位置,我只是想移动它,因为我在互联网上找不到一个有效的例子。我想谦虚地问一下box参数的正确表达式是什么?你能告诉我一个有效的例子吗?

为方便起见,我在此复制paste {{1}}方法:

  

粘贴(im,box = None)

     

将PIL图像粘贴到照片图像中。请注意,如果显示照片图像,这可能会非常慢。

     

参数:
  im - PIL图像。大小必须与目标区域匹配。如果模式不匹配,则图像将转换为位图图像的模式。

     

box - 定义左,上,右和下像素坐标的4元组。如果给出None而不是元组,则假定所有图像。

1 个答案:

答案 0 :(得分:0)

PhotoImage.paste的box参数似乎完全被忽略了。 您需要提供完整的图像:

from tkinter import *
from PIL import Image, ImageTk

root = Tk()

background_Image = Image.new("RGB",(500,500), (255,0,255,255))
background_Tk = ImageTk.PhotoImage(background_Image)
mask = Image.new('RGBX', (50,50), color=(255,255,255,0))

p1 = Label(root, image=background_Tk)
p1.pack()

# ...later
background_Image.paste(mask, box=(40,40,90,90))
background_Tk.paste(background_Image)

root.mainloop()