Я создавал приложение, используя Tkinter для создания экземпляра GUI.Я пытаюсь сделать его объектно-ориентированным, чтобы код можно было использовать где-то еще, чтобы упростить использование Tkinter.Проблема, с которой я столкнулся, заключается в возможности вызова сложных функций с аргументами для команд кнопок.
Я пытался узнать как можно больше о кнопках.Я читал и смотрел видео о том, как привязать команду к конкретным щелчкам мыши и передать функцию, используя частичное, чтобы сломать функцию.Эти параметры не будут соответствовать текущей архитектуре кода.Последняя идея, которую я пытался использовать lambda для создания временной функции.
def add_button(self, title, command, where, frame):
button = ttk.Button(frame, text=title,command=lambda: command)
button.pack(side=where, fill='both', expand=True)
return button
Это класс, который создает страницу с нужными виджетами.
class StartPage(Page):
def __init__(self, container, controller):
super().__init__(container, controller)
title_frame = tk.LabelFrame(self, text='StartPage')
title_frame.pack(side='top')
title = tk.Label(title_frame, text='EPA Engine Report Filing', font=('Helvetica', 16))
title.pack(side='bottom', pady=25)
buttons = {'Quit': quit(), 'Stuff': do_something()}
button_frame = tk.Frame(self)
button_frame.pack(side='top', pady=75)
for button, command in buttons.items():
self.add_button(button, command, 'bottom', button_frame)
Мой конкретный вопрос заключается в следующемкогда цикл for выполняет итерацию по словарю, объявленному как кнопки в StartPage.__init__
, перезаписывают ли лямбда-функции для кнопки 'Stuff' лямбда-функцию для предыдущей кнопки 'quit'?Если это так, то последняя созданная кнопка будет единственной кнопкой для работы, если я понимаю лямбду.Когда этот код запускается, ничего не появляется.Когда функции для кнопок не имеют скобок, появляется начальное окно, но кнопки ничего не делают.
Спасибо за чтение и за любые советы, которые вы можете дать.