Как очищать лейбл перед обновлением текста в нем?
Есть вот такой код, который через комбобокс в зависимости от выбранного значения выдает заданный ответ:
from tkinter import *
from tkinter.ttk import Combobox
from threading import Timer
def clicked():
if combo.current() == 0:
lbl_1.configure(text="Value can't be «Empty». Try again.")
elif combo.current() == 1:
lbl_1.configure(text=combo.get())
lbl_16 = Label(window,text="We are sorry, you too young.")
lbl_16.grid(column=0, row=5)
btn['state'] = DISABLED
combo['state'] = DISABLED
window.destroy()
elif combo.current() == 2:
lbl_1.configure(text=combo.get())
lbl_16 = Label(window,text="This is a beautifull age!")
lbl_16.grid(column=0, row=5)
elif combo.current() == 3:
lbl_1.configure(text=combo.get())
lbl_16 = Label(window,text="Wow! U are so adult.")
lbl_16.grid(column=0, row=5)
elif combo.current() == 4:
lbl_1.configure(text=combo.get())
lbl_16 = Label(window,text="Bless you!")
lbl_16.grid(column=0, row=5)
elif combo.current() == 5:
lbl_1.configure(text=combo.get())
lbl_16 = Label(window,text="We hope, you don't forget your pills.")
lbl_16.grid(column=0, row=5)
elif combo.current() == 6:
lbl_1.configure(text=combo.get())
lbl_16 = Label(window,text="Have you seen Lenin?")
lbl_16.grid(column=0, row=5)
else:
lbl_1.configure(text=combo.get())
window = Tk()
window.title("Welcome")
window.geometry('400x250')
selected = BooleanVar()
combo = Combobox(window)
combo['values'] = ("«Empty»", "Less 16", "16-21", "22-35", "36-50", "50-65", "Over 66")
combo.current(0) # тут устанавливается вариант по умолчанию от 0 до N-го элемента
combo.grid(column=0, row=1)
btn = Button(window, text="Apply", command=clicked)
btn.grid(column=1, row=1)
lbl_0 = Label(window,text="Choose your age:")
lbl_0.grid(column=0, row=0)
lbl_1 = Label(window)
lbl_1.grid(column=2, row=3)
lbl_2 = Label(window)
lbl_2.grid(column=1, row=2)
window.mainloop()
Но при выборе каждого нового значения, ответы визуально перекрывают друг друга. Пробовал 'delete'-ы, 'remove'-ы, гуглил, но увы, ответа не нашел.
Вот тут чел столкнулся с похожей проблемой, но в комментарии, который он пометил как "Ответ на свой вопрос" я не увидел решения.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так
from tkinter import *
from tkinter.ttk import Combobox
from threading import Timer
def clicked(lbl_16): # +++ lbl_16
if combo.current() == 0:
lbl_1.configure(text="Value can't be «Empty». Try again.")
elif combo.current() == 1:
lbl_1.configure(text=combo.get())
lbl_16.configure(text="We are sorry, you too young.") # +++
btn['state'] = DISABLED
combo['state'] = DISABLED
window.destroy()
elif combo.current() == 2:
lbl_1.configure(text=combo.get())
lbl_16.configure(text="This is a beautifull age!") # +++
elif combo.current() == 3:
lbl_1.configure(text=combo.get())
lbl_16.configure(text="Wow! U are so adult.") # +++
elif combo.current() == 4:
lbl_1.configure(text=combo.get())
lbl_16.configure(text="Bless you!") # +++
elif combo.current() == 5:
lbl_1.configure(text=combo.get())
lbl_16.configure(text="We hope, you don't forget your pills.") # +++
elif combo.current() == 6:
lbl_1.configure(text=combo.get())
lbl_16.configure(text="Have you seen Lenin?") # +++
else:
lbl_1.configure(text=combo.get())
window = Tk()
window.title("Welcome")
window.geometry('400x250')
selected = BooleanVar()
combo = Combobox(window)
combo['values'] = ("«Empty»", "Less 16", "16-21", "22-35", "36-50", "50-65", "Over 66")
combo.current(0) # тут устанавливается вариант по умолчанию от 0 до N-го элемента
combo.grid(column=0, row=1)
lbl_16 = Label(window) # +++
lbl_16.grid(column=0, row=5) # +++
btn = Button(window, text="Apply", command=lambda l_16=lbl_16 : clicked(l_16)) # +++ lambda
btn.grid(column=1, row=1)
lbl_0 = Label(window,text="Choose your age:")
lbl_0.grid(column=0, row=0)
lbl_1 = Label(window)
lbl_1.grid(column=2, row=3)
lbl_2 = Label(window)
lbl_2.grid(column=1, row=2)
window.mainloop()

