在前景显示图像(tkinter)

2024-09-28 01:27:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Tkinter(python3.7)创建一个仪表板,并尝试在其他小部件上放置一个图像,以增强它们的外观。问题是,每次我把一个图像放在背景中,它就结束了。理想情况下,我想把一个透明的图像放在我的面板上的所有小部件上,但我会满足于能够将不透明的图像放在显示器的某些部分上。 我一直在使用place()来定位我的小部件,因为我从不希望小部件移动,只需要它为特定的屏幕分辨率工作。 到目前为止,我尝试过使用PIL包,并尝试将图像放入标签和画布中,但两者的结果似乎相同。即使我把我的小部件放在带有图像的画布中,小部件也会显示在前面。 下面是一个简单的例子:

import tkinter as tk
import PIL.Image
import PIL.ImageTk

root = tk.Tk()
image = PIL.Image.open('esis/decals_green.gif')
photo = PIL.ImageTk.PhotoImage(image)
label = tk.Label(root, image=photo)
label.image = photo #keep reference

sampleWidget = tk.Button(root, text='Test')

sampleWidget.place(x=0, y=0, height=100, width=100)
label.place(x=0, y=0, height=200, width=200)

root.mainloop()

不过,我把标签放在最后一个按钮下面。在


Tags: 图像imageimportpil部件画布placeroot
1条回答
网友
1楼 · 发布于 2024-09-28 01:27:19

当tkinter小部件重叠时,tkinter将使用堆叠顺序(有时称为z-索引)来确定哪个小部件覆盖另一个部件。在

堆叠顺序默认为小部件的创建顺序(先前创建的小部件的顺序低于后来创建的小部件)。您可以使用lowerlift方法更改此顺序。因为您是最后创建按钮小部件的,所以它在堆叠顺序中将有更高的位置,因此它将出现在图像的顶部。在

如果您等到创建完所有其他小部件之后才创建带有图像的标签,那么它将以堆叠顺序排列最高,并因此出现在所有其他小部件的顶部。您也可以保持代码不变,并在代码末尾附近添加label.lift(),以将其提升到堆叠顺序的顶部。在

相关问题 更多 >

    热门问题