python - “确认”用户点击
问题描述
我看到当你按下电视遥控器上的按钮时,它不会立即进入频道,一段时间后它会降落在频道上,但如果你在一定时间内按下按钮,它不会降落。
有没有办法在 tkInter 中执行此操作,如果用户在一段时间内(在本例中为两秒)单击按钮,除非用户不单击按钮,否则该函数不会被执行。
为了澄清,我想将命令执行延迟 2 秒,这样如果用户再次按下相同的按钮,您可以再次取消它。
解决方案
与 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()
推荐阅读
- python - 如何将通道图像合并为 RGB 图像
- python - 我需要使时间戳值在每个组的开始时重复
- ember.js - 如何在不使用 Route 的情况下知道 Ember 查询参数何时加载?
- ios - 使用 Beizepath 在 UIView 上绘制形状?
- dataframe - 在 CNN 中重塑图像时出错(Googel Colab)
- c - 如何以 Windows/Linux 中的“tree”命令的样式在 C 中美化二叉搜索树?
- python-3.x - 如何将列表中可用特定名称的文件从一个文件夹复制到另一个文件夹熊猫
- javascript - 是什么导致 TypeERROR: Content is Null 在我的 JavaScript 上?
- css - 在动画留下工件(痕迹)期间更改背景
- mysql - 如何使用 MySQL 存储过程获取线程安全最大值以查找下一个序列号?