【问题标题】:Prevent a function being called twice when a user double-clicks a button?防止用户双击按钮时调用两次函数?
【发布时间】:2015-10-19 13:30:08
【问题描述】:

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

【问题讨论】:

    标签: python tkinter ttk


    【解决方案1】:

    只需告诉按钮的回调函数(其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 的回调函数和一个名为 self.root 的根对象。

    【讨论】:

    • 不要在 200 毫秒后将其更改回来,而是在函数完成执行任何操作后将其更改回来。这稍微安全一些,因为它还可以防止缓慢的双击。
    猜你喜欢
    • 2011-09-02
    • 2014-12-11
    • 1970-01-01
    • 2020-06-11
    • 2014-10-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多