0

我想在用户按下按钮时停用按钮。因为我正在制作的 GUI 中有很多按钮。我想概括一下。我正在执行以下操作:

def deactivate (btn):
   btn.configure(state='disabled')
   print ('Button is deactivated')
   return

Button = Tk.Button(root, text='click',command=lambda: deactivate (Button))

上面的代码对我来说工作正常,但我没有看到有人在使用它。所以,我想知道,这是否有我不知道的并发症?

4

1 回答 1

2

你的实现很好。但是正如您所说,会有很多按钮具有相同的功能,那么我建议创建一个自定义 Button 类(继承自tk.Button)来嵌入此功能,并将此自定义 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()

请注意,我已更改command选项的回调签名。按钮的实例将作为第一个参数传递给回调,以便您可以对按钮执行任何操作。

于 2021-05-18T07:02:44.933 回答