Tkinter — Как я могу поместить метку на холст, чтобы скрыть ее?

#python #tkinter #canvas

#python #tkinter #холст

Вопрос:

если я пытаюсь поместить ярлык на холст, последний всегда остается сверху (см. Прикрепленное Изображение), но что делать, если я хочу поместить холст под ярлык?

введите описание изображения здесь

ниже мой пример кода:

 from tkinter import *
from tkinter import ttk


def ChangeinItalian():
    MyLabel.configure(text="Ciao Ciao Ciao Ciao:")
def ChangeinEnglish():
    MyLabel.configure(text="Hi Hi Hi Hi:")

root = Tk()
root.geometry("550x350")

MyFrame=Frame(root, background="#ffffff", highlightbackground="#848a98", highlightthickness=1)
MyFrame.place(x=5, y=5, width=535, height=300)

MyFrame.grid_columnconfigure(0, minsize=16)
MyFrame.grid_columnconfigure(2, minsize=10)
MyFrame.grid_columnconfigure(3, weight=1)
MyFrame.grid_columnconfigure(4, minsize=10)
MyFrame.grid_columnconfigure(6, minsize=16)
MyFrame.grid_rowconfigure(0, minsize=16, pad=16)
MyFrame.grid_rowconfigure(2, minsize=16, pad=16)

ttk.Label(MyFrame, text="Introduction", background="#ffffff").grid(row=1, column=1, sticky="w")



# I change the grid method options to cover the label with the canvas.. but it just an example.. what I want to do is put the label on the Canvas and not vice versa.
Canvas(MyFrame, height=1, background="#a0a0a0", highlightthickness=0, highlightbackground="white").grid(row=1, column=1, columnspan=3, sticky="we")



MyLabel=ttk.Label(MyFrame, text="Hi Hi Hi Hi", background="#ffffff")
MyLabel.grid(row=3, column=1, sticky="w")

ttk.Entry(MyFrame, width=70).grid(row=3, column=3)
ttk.Button(MyFrame, text="...", width=5).grid(row=3, column=5, sticky="we")

ItalianButton=ttk.Button(MyFrame, text="Italiano", command=ChangeinItalian)
ItalianButton.place(x=16, y=150)
EnglishButton=ttk.Button(MyFrame, text="English", command=ChangeinEnglish)
EnglishButton.place(x=16, y=200)

root.mainloop()
  

Комментарии:

1. Можете ли вы показать нам свой код на данный момент?

2. Я только что добавил свой пример кода, но в этом нет необходимости.. Я просто хочу поместить свою метку на холст, а не наоборот. как я могу это сделать?

Ответ №1:

Виджеты имеют так называемый порядок укладки, который изначально определяется порядком создания виджетов. Виджеты, созданные позже, имеют порядок укладки выше, чем виджеты, созданные ранее. Когда два или более виджета занимают одно и то же пространство, tkinter использует порядок укладки, чтобы определить, какой виджет находится сверху.

В вашем случае вы создаете метку, а затем холст, что означает, что холст имеет более высокий порядок укладки и, таким образом, отображается поверх метки.

Если вы хотите, чтобы холст находился под меткой, вы можете либо создать холст перед меткой, либо использовать метод lift или lower для настройки порядка укладки.

Комментарии:

1. отлично! Я не знал о порядке укладки. теперь я решил спасибо, но.. У меня есть еще один маленький вопрос. что делать, если я хочу добавить пустое заполнение (всего 5 пикселей) справа от моей метки «Введение»? как я могу достичь этой цели?

2. @TurboC: просто прочитайте документацию по grid методу.

3. нет, вы не поняли. Я хотел добавить пустое заполнение с точки зрения метки, а не с точки зрения сетки. Я говорю о расширении длины метки справа.

4. @turboc, вы можете найти ответы на подобные вопросы, прочитав доступную документацию и просто немного поэкспериментировав.