问题描述
我在tkinter / ttk中开发了一个用户界面,该界面使用标准的ttk.Button小部件使用'command'参数调用各种功能。 问题是,如果用户双击按钮,该函数将被调用两次。 这会引起各种各样的问题。 双击事件没有任何限制,是否有办法禁用第二次单击? 我已经在函数定义的开头尝试过time.sleep()和after(),但是我还没有找到一种使它起作用的方法。 我是否需要将每个函数手动绑定到每个按钮的单击并重新分配事件处理程序? 任何直接忽略双击的方法都可以????
1楼
只需告诉按钮的回调函数(其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
正如Bryan所指出的那样,最好等到函数完成才更好(更简单)(除非您只是想防止意外的双击,并且可以在函数必须完成之前再次调用该函数):
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
。