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

时间:2015-10-19 13:30:08

标签: python tkinter ttk

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

1 个答案:

答案 0 :(得分:6)

只需告诉按钮的回调功能(其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

正如布莱恩指出的那样,只要等到功能结束就更好更简单(除非你只是想防止意外的双击,并且可以在它之前再次调用该功能。)必须完成):

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的回调函数以及名为self.root的根对象