Здравствуйте, помогите разобраться с поведением виджета Entry.
Есть условия (Condition1, Condition2), которые выбираются в комбобоксе. В зависимости от этих условий включаются/выключаются поля ввода Entry. При проверке состояний Entry в функции validate происходят непонятные для меня явления.
В таком варианте программа работает ожидаемо, с виду все правильно:
import tkinter as tk
from tkinter import ttk
def change_condition_types(*args):
match var.get():
case 'Condition 1':
entry1['state'] = 'normal'
entry2['state'] = 'disabled'
case 'Condition 2':
entry1['state'] = 'disabled'
entry2['state'] = 'normal'
def validate():
for entry in (entry1, entry2):
print('Состояние: ', entry['state'])
match entry['state']:
case 'normal':
print('Виджет включен', entry)
case 'disabled':
print('Виджет отключен', entry)
case _:
print('Почему я попадаю сюда?', entry)
# Окно
window = tk.Tk()
window.geometry('600x500')
# Виджеты
ttk.Button(window, text='Validate!', command=validate).pack()
entry1 = ttk.Entry(window)
entry1.pack(pady=10)
entry2 = ttk.Entry(window)
entry2.pack(pady=10)
types = ['Condition 1', 'Condition 2']
var = tk.StringVar(value=types[0])
combobox = ttk.Combobox(master=window, values=types, textvariable=var, state='readonly')
combobox.pack()
var.trace('w', change_condition_types)
# Первоначальные состояния
entry2.configure(state='disabled')
window.mainloop()
Вывод после нажатия на кнопку:
Состояние: normal
Виджет включен .!entry
Состояние: disabled
Виджет отключен .!entry2
Но если в функции validate закомментировать строку c print таким образом:
def validate():
for entry in (entry1, entry2):
#print('Состояние: ', entry['state'])
match entry['state']:
case 'normal':
print('Виджет включен', entry)
case 'disabled':
print('Виджет отключен', entry)
case _:
print('Почему я попадаю сюда?', entry)
То приложение начинает попадать в условие _, хотя статусы виджетов остаются прежними, они все так же включаются-выключаются:
Почему я попадаю сюда? .!entry
Почему я попадаю сюда? .!entry2
Из-за чего такое поведение?