2015-10-19 51 views
-1

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

回答

4

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

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进口,一个面向对象的应用程序的结构,称为self.my_button按钮,称为self.callback一个回调函数,并称之为self.root一个根对象。

+0

而不是在200ms后将其更改回来,只要功能完成,就可以将其更改回去。这稍微安全一些,因为它也可以防止慢速双击。 –

+0

@BryanOakley--这是一个很好的观点。 – TigerhawkT3

相关问题