首页 > 解决方案 > “确认”用户点击

问题描述

我看到当你按下电视遥控器上的按钮时,它不会立即进入频道,一段时间后它会降落在频道上,但如果你在一定时间内按下按钮,它不会降落。

有没有办法在 tkInter 中执行此操作,如果用户在一段时间内(在本例中为两秒)单击按钮,除非用户不单击按钮,否则该函数不会被执行。

为了澄清,我想将命令执行延迟 2 秒,这样如果用户再次按下相同的按钮,您可以再次取消它。

标签: pythonpython-3.xuser-interfacetkinter

解决方案


与 Martijn Pieters 不同的方法。我使用 .after 来安排一个事件在 2 秒后发生,而不是一个单独的线程。

单击按钮一次将导致该ConfirmedAction函数在 2 秒后被调用。在 2 秒窗口内再次单击该按钮将取消计时器。

import tkinter as tk

def ConfirmedAction():
    print("Doing something")

class ConfirmButton(tk.Button):
    def __init__(self,master,**kw):
        self.confirmcommand = kw.pop('confirm',None)
        super(ConfirmButton, self).__init__(master, **kw)
        self.timer = None
        self['command'] = self._clicked
    def _clicked(self):
        if not self.timer:
            self.timer = self.after(2000,self._doAction)
        else:
            self.after_cancel(self.timer)
            self.timer = None
            print("Action Cancelled")
    def _doAction(self):
        self.confirmcommand()
        self.timer = None

root = tk.Tk()
btn1 = ConfirmButton(root,text="Hello",confirm=ConfirmedAction)
btn1.grid()
root.mainloop()

推荐阅读