Менеджер геометрии Tkinter не перекрываетсяPython

Программы на Python
Anonymous
Менеджер геометрии Tkinter не перекрывается

Сообщение Anonymous »

Последние несколько лет я использую полнофункциональный виджет со списком, который я создал путем объединения других виджетов Tkinter. (Потому что он мне нравится больше, чем ttk.Combobox.) Для раскрывающегося списка я всегда использовал виджет верхнего уровня, поскольку он перекрывает другие виджеты, а не отодвигает их в сторону. Мне никогда не удавалось заставить диспетчер геометрии мест работать как раскрывающийся список, он не перекрывал другие виджеты. Я знаю, что некоторые люди говорят, что никогда не используйте Place() ни для чего, но мне просто нужно удовлетворить свое любопытство относительно того, было бы проще использовать Placed Frame вместо использования Toplevel без полей window.
Но я не могу добиться перекрытия d Frame, поэтому может ли кто-нибудь сказать мне, что не так с этим простым примером кода, почему не раскрывающийся список перекрывает другие виджеты? Как только для его зависимости установлено значение 1, он становится невидимым и закрывается другими виджетами.
import tkinter as tk

def unplace():
dropdown.place_forget()

def show(evt=None):
dropdown.lift()
dropdown.place(relx=0, rely=0.3, anchor='nw', relwidth=1.0)#rely=1,
# dropdown.place(relx=0, rely=1, anchor='nw', relwidth=1.0)
dropdown_item.grid(sticky="ew")

root = tk.Tk()
root.geometry("400x400+600+300")
root.config(bg="red")
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)

frm = tk.Frame(root, bg="blue")
frm.grid(sticky="news")

ent = tk.Entry(frm)
ent.grid()
ent.bind("", show)

dropdown = tk.Frame(ent, bg="tan")
dropdown_item = tk.Button(
dropdown, bg="steelblue", width=12, command=unplace, text="item")
# If these labels are commented, `dropdown` still won't overlap.
c = tk.Label(frm, text="Overlap Me")
c.grid()
d = tk.Label(frm, text="Overlap Me")
d.grid()
e = tk.Label(frm, text="Overlap Me")
e.grid()
f = tk.Label(frm, text="Overlap Me")
f.grid()

show()

root.mainloop()


Подробнее здесь: https://stackoverflow.com/questions/786 ... verlapping

Вернуться в «Python»