0

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

下面的代码是一个最小的例子,展示了我在做什么。背景是现有图像,蒙版是要粘贴到现有图像上的图像。默认情况下,遮罩将在现有图像的左上角更新。

通过向该方法添加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

粘贴(我,框=无)

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

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

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

4

1 回答 1

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()
于 2014-10-24T21:25:39.230 回答