2014-10-08 50 views
0

我试图使用paste(im, box=(4-tuple))方法来更新在Tkinter(python)窗口中创建的Label中显示的图像。如何在Tkinter中的不同位置更新图像

以下代码是显示我在做什么的最小示例。背景是现有图像,蒙版是要粘贴到现有图像上的图像。默认情况下,蒙版将在现有图像的左上角进行更新。

通过将box参数添加到paste方法中,我希望将掩码移到不同的位置。在这种情况下,我为box参数尝试box=(40,40,90,90)

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参数的坐标组合后,我仍然无法更改掩码的位置。在这种情况下,我没有确切的位置显示掩码,我只是想移动它,因为我在Internet上找不到工作示例。我想虚心询问box参数的正确表达式是什么?你能告诉我一个可行的例子吗?

为方便起见,我复制documentationpaste方法在这里:

膏(IM,箱=无)

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

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

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

+1

这可能是“盒子”定义要复制_from_图像的一部分,而不是_to_。我自己并没有使用'paste'函数,但这似乎解释了你所看到的。尝试使该框小于要复制的图像,以查看它是否只复制图像的一个子集。 – 2014-10-08 15:59:48

回答

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() 
相关问题