Для обновления 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()
→ Ссылка