当用户双击按钮时防止函数被调用两次?

Prevent a function being called twice when a user double-clicks a button?

我在 tkinter/ttk 中开发了一个用户界面,它使用标准 ttk.Button 小部件来使用 'command' 参数调用各种函数。问题是,如果用户双击一个按钮,该函数将被调用两次。这会导致各种各样的问题。双击事件没有绑定任何东西,那么有没有办法禁用第二次单击?我在函数定义的开头尝试了 time.sleep() 和 after() 但我还没有找到使它工作的方法。我是否需要手动将每个函数绑定到每个按钮的单击并重新分配事件处理程序?有什么直接的方法可以全面忽略双击吗???

只需告诉按钮的回调函数(它的 command)禁用按钮,然后在短暂的时间(此处为 200 毫秒)后将其恢复正常。

def callback(self):
    self.my_button.config(state=tk.DISABLED)
    self.root.after(200, lambda: self.my_button.config(state=tk.NORMAL))
    # other actions

正如 Bryan 指出的那样,等待函数完成会更好也更简单(除非您只是想防止意外双击并且同意在函数必须完成之前再次调用该函数):

def callback(self):
    self.my_button.config(state=tk.DISABLED)
    # other actions
    self.my_button.config(state=tk.NORMAL)

此示例代码假定导入 import tkinter as tk、一个 OO 应用程序结构、一个名为 self.my_button 的按钮、一个名为 self.callback 的回调函数和一个名为 [=16] 的根对象=].