Для обновления Label приходится 2 раза нажимать на кнопку
Столкнулся с такой неприятностью, у меня есть 2 label и при нажатии на кнопку (button), хочу что бы надпись на Label обновились исходя из алгоритма действий прописанным мною, но Label обновляется только после второго нажатия на кнопку… Я не понимаю почему так происходит…
import tkinter as tk
c = list()
with open('Simbol.txt') as file:
for i in file:
c.append(i.strip())
def on_key_press(event: tk.Event):
if event.keysym == "BackSpace":
return None
if event.char not in c:
return "break"
if len(pole.get()) >= 1:
return "break"
def btn_click():
global b
global lastBukva
if b==0:
global pervayaBukva
pervayaBukva = pole.get()
pole.delete(0, tk.END)
print(pervayaBukva)
lastBukva=pervayaBukva
ispGoroda=[pervayaBukva]
b=1
print('2',b)
elif b==1:
gorod.config(text='Введите назваение города начинающегося на букву:')
bukva.config(text=str(lastBukva))
pole.delete(0, tk.END)
VvodGorod=str()
b=0
window = tk.Tk()
window.resizable(width=False, height=False)
window.wm_attributes('-alpha', 0.8)
window.geometry('640x480')
bukva=tk.Label()
bukva.place(relx=0.7, rely=0.175)
gorod=tk.Label(text='Введите любую букву:')
gorod.place(relx=0.2, rely=0.15,relheight=0.1,relwidth=0.5)
pole=tk.Entry()
pole.place(relx=0.35,rely=0.25,relheight=0.1,relwidth=0.3)
pole.bind("<KeyPress>", on_key_press)
knoka=tk.Button(text='Нажми сюда, что бы ввести город',command=btn_click)
knoka.place(relx=0.32,rely=0.4,relheight=0.1,relwidth=0.35)
window.mainloop()
Ответы (1 шт):
Автор решения: Сергей
→ Ссылка
Программа делает то, что вы написали. При первом нажатии отрабатывается ветка if b==0:, при втором нажатии ветка elif b==1:. Поэтому код из elif перенес в основную программу. Задокументировал строку pole.bind("", on_key_press), так как она мешала вводу букв в поле Entry().
import tkinter as tk
c = list()
with open('Simbol.txt') as file:
for i in file:
c.append(i.strip())
pass
def on_key_press(event: tk.Event):
if event.keysym == "BackSpace":
return None
if event.char not in c:
return "break"
if len(pole.get()) >= 1:
return "break"
def btn_click():
global b
global lastBukva
if b==0:
global pervayaBukva
pervayaBukva = pole.get()
# pole.delete(0, tk.END)
print(pervayaBukva)
lastBukva=pervayaBukva
ispGoroda=[pervayaBukva]
b=1
print('2',b)
gorod.config(text='Введите назваение города начинающегося на букву:')
bukva.config(text=str(lastBukva))
pole.delete(0, tk.END)
VvodGorod=str()
b=0
window = tk.Tk()
window.resizable(width=False, height=False)
window.wm_attributes('-alpha', 0.8)
window.geometry('640x480')
bukva=tk.Label()
bukva.place(relx=0.7, rely=0.175)
gorod=tk.Label(text='Введите любую букву:')
gorod.place(relx=0.2, rely=0.15,relheight=0.1,relwidth=0.5)
pole=tk.Entry()
pole.place(relx=0.35,rely=0.25,relheight=0.1,relwidth=0.3)
#pole.bind("<KeyPress>", on_key_press)
knoka=tk.Button(text='Нажми сюда, что бы ввести город',command=btn_click)
knoka.place(relx=0.32,rely=0.4,relheight=0.1,relwidth=0.35)
window.mainloop()