Виджет как аргумент опции команды виджета
Я хочу деактивировать кнопку, когда пользователь нажимает на нее. Поскольку я делаю много кнопок в графическом интерфейсе. Я хочу обобщить это. Я делаю это так:
def deactivate (btn):
btn.configure(state='disabled')
print ('Button is deactivated')
return
Button = Tk.Button(root, text='click',command=lambda: deactivate (Button))
Приведенный выше код у меня работает нормально, но я нигде не видел, чтобы кто-нибудь его использовал. Итак, мне интересно, есть ли в будущем осложнения, о которых я не знаю?
1 ответ
Ваша реализация в порядке. Но, как вы сказали, будет много кнопок с такой же функцией, тогда я бы предложил создать собственный класс Button (унаследованный от
Ниже приведен пример:
import tkinter as tk
class MyButton(tk.Button):
def __init__(self, parent=None, *args, **kw):
self._user_command = kw.pop("command", None)
super().__init__(parent, *args, **kw)
self["command"] = self._on_click
def _on_click(self):
self.configure(state="disabled")
if self._user_command:
self._user_command(self)
def on_click(btn):
print (f'Button "{btn["text"]}" is deactivated')
root = tk.Tk()
button1 = MyButton(root, text='click', command=on_click)
button1.pack()
button2 = MyButton(root, text='Hello', command=on_click)
button2.pack()
root.mainloop()
Обратите внимание, что я изменил подпись обратного вызова для