在前景中显示图像(tkinter)



我正在Tkinter(Python 3.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()

即使我把图像标签放在最后,它也会显示在按钮下方。

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

堆叠顺序默认为小组件的创建顺序(之前创建的窗口小组件的顺序低于后来创建的窗口小组件(。您可以使用lowerlift方法更改此顺序。由于您是上次创建的按钮小部件,因此它将在堆叠顺序中具有较高的位置,因此它将显示在图像顶部。

如果等到创建完所有其他小部件后再使用图像创建标签,则标签将在堆叠顺序中最高,因此显示在所有其他小部件之上。您也可以将代码保留原样,并在代码末尾附近添加label.lift()以将其提升到堆叠顺序的顶部。

最新更新