Я начал программировать простое графическое приложение в Python, используя библиотеку Tkinter. Все работает отлично, но для динамического изменения любого виджета (например, от кнопки «login» до «logout» и т. Д.) Мне нужно получить переменную, содержащую сам объект виджета в функции извне. Я могу сделать это двумя способами:Python 3 и Tkinter. Слишком много глобальных переменных
- Передача виджета в качестве аргумента;
- с использованием глобальных переменных.
Упрощенный пример:
1) Passing в качестве аргумента:
def changeLabel(b):
b.config(text='Logout')
btn1 = Button(f0,text="Login",width=15)
btn1.grid(row=1,column=2,rowspan=1,padx=10,ipadx=10)
changeLabel(btn1)
2) или с помощью глобальной переменной:
def changeLabel():
global btn1
btn1.config(text='Logout')
btn1 = Button(f0,text="Login",width=15)
btn1.grid(row=1,column=2,rowspan=1,padx=10,ipadx=10)
changeLabel(btn1)
Теперь я знаю, что глобальные переменные следует избегать, но пропускать каждый виджет в качестве аргумента через многие функции, даже в простой приложение, это беспорядок.
Итак, как лучше всего управлять виджетами Tkinter во время выполнения? Можете ли вы предложить мне правильный путь? Спасибо
Не можете вы просто не имеют 'функцию changeLabel' на всех, и сделать' btn1.config (текст = "Выход") 'inline? Кстати, утверждение 'global' не требуется в подходе # 2, потому что вы не присваиваете ничего' btn1'. – Kevin
Третьим вариантом является использование классов, в которых виджет является атрибутом класса. –
Мой пример является добровольным упрощена, в моем приложении мне нужно: - скрыть кнопку и показать еще один - текст изменения каждый клик - скрыть/показать кадры - и так далее ... – decadenza