Отображение изображения на переднем плане (tkinter) - PullRequest
0 голосов
/ 01 октября 2018

Я создаю панель инструментов в 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()

Несмотря на то, что я помещаю метку изображения в последнюю очередь, она отображается под кнопкой.

1 Ответ

0 голосов
/ 01 октября 2018

Когда виджеты tkinter перекрываются, tkinter будет использовать порядок наложения (иногда называемый z-index), чтобы определить, какой виджет перекрывает другой.

Порядок размещения по умолчанию соответствует порядку, в котором создаются виджеты (созданные ранее виджеты имеют более низкий порядок, чем созданные позже).Вы можете изменить этот порядок с помощью методов lower и lift.Поскольку вы создали последний виджет кнопки, он будет занимать более высокое место в порядке размещения и, таким образом, он будет отображаться поверх изображения.

Если вы дождетесь создания метки с изображением до тех пор, пока не будут созданы все другие виджеты, она будет самой высокой в ​​порядке наложения и, следовательно, появится поверх всех других виджетов.Вы также можете оставить код как есть и добавить label.lift() в конце кода, чтобы поднять его до верха порядка наложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...