【发布时间】:2018-06-27 21:46:49
【问题描述】:
我正在努力在背景图像上添加可拖动标签,其中标签是具有透明背景的图像。用于标签本身的图像是透明的,但标签本身相对于其父画布不是透明的。由于标签是可拖动的,因此我不能轻易地将父图像用作标签,并将透明图像粘贴在顶部。
龙是一个可拖动的标签,背景是透明的,但是你看到标签本身是不透明的,并且覆盖了画布图像。
龙图像本身具有透明背景,因为正常背景是蓝色的,所以我知道问题出在标签透明度上。
希望的行为是让标签透明,因此当标签上的图像透明时,标签应该显示到下面的图像。
这是一个最小的例子:
from PIL import Image, ImageTk
import numpy as np
import tkinter as tk
#Creates a blue square with a transparent border
blue_square_transparent_border = [[[0,0,0,0]]*100]*10 + [[[0,0,0,0]]*30 + [[0,0,255,255]]*40 + [[0,0,0,0]]*30]*40 + [[[0,0,0,0]]*100]*10
blue_square_transparent_border = np.array(blue_square_transparent_border, dtype='uint8')
#convert numpy array to PIL image
pil_image = Image.fromarray(blue_square_transparent_border)
root = tk.Tk()
root.configure(background='red')
#convert PIL image to tkinter image
tk_image = ImageTk.PhotoImage(pil_image)
#create label
image_label = tk.Label(root, image=tk_image)
image_label.pack()
root.mainloop()
我希望看到的是红色背景上的蓝色方块,没有边框。但是在上面的例子中,出现了灰色的边框,因为它是通过透明图像看到的标签;调整窗口大小时很容易看到这一点。我怀疑如果标签是透明的,这会解决我的问题。
任何帮助都会很棒,谢谢!
【问题讨论】:
-
我认为这可能会有所帮助stackoverflow.com/q/10461045/7032856
-
@Nae 很抱歉起初的问题很糟糕!我用一个简单的例子更新了信息。我也查看了您的链接,但我认为它不能解决我的问题!如果您有更多意见,请告诉我!
-
所有小部件都有背景颜色,您不能将其设置为透明。您只能使用
create_image将透明图像放在Canvas 小部件上。 -
感谢@furas 提供的信息,我担心这就是答案。那么有没有办法制作一个非矩形的小部件呢?
标签: python tkinter tkinter-canvas