tkinter проверка if состояния status у button

Рейтинг: 0Ответов: 1Опубликовано: 21.03.2023

Возник такой вопрос. Есть функция, внутри которой перед выполнением должна происходить проверка с помощью If на status button. То есть, если кнопка активна: 'normal' или неактивна: 'disable'. Функция выглядит так:

def add():
    if Button_add_games['state'] == 'normal':

Вроде всё логично, если у кнопки статус такой, делаем дела. Однако, по неведомой мне причине, он почему-то пропускает это условие If. Подскажите как можно исправить?

Допустим пример кода. Условие if не работает.

def add():
    if Button_add_games2['state'] == 'disable':
        label_Name = ttk.Label(app, text='Название')
        label_Name.place(x=10, y=90)

Button_add_games1 = ttk.Button(app, text='Внесение 1', state='normal', command=add)
Button_add_games1 .place(width=130, height=60, x=250, y=15)

Button_add_games2 = ttk.Button(app, text='Внесение 2', state='disable', command=add)
Button_add_games2.place(width=130, height=60, x=380, y=15)

Ответы

▲ 1Принят

Если добавить print(type(Button_add_games2['state'])), то будет видно, что там лежит не строка, а объект типа <class '_tkinter.Tcl_Obj'>. Из-за этого условие и не выполняется - этот объект не равен строке "disable".

Проверка будет срабатывать, если сконвертировать этот объект в строку:

def add():
    print(type(Button_add_games2['state']))  # <class '_tkinter.Tcl_Obj'>
    print(str(Button_add_games2['state']))  # disable
    if str(Button_add_games2['state']) == 'disable':
        label_Name = ttk.Label(app, text='Название')
        label_Name.place(x=10, y=90)