我在Python的tkinter应用程序中有一个条目。如果用户更改条目内容,程序将通过onValidate
函数作出反应。你知道吗
现在,如果用户有一段时间没有按任何键,我想选择输入字段中的所有文本。你知道吗
下面我尝试在1000
ms后使用after
函数select_all_text
,但似乎不起作用。你知道吗
import tkinter as tk
class MyEntry(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.vcmd = (self.register(self.onValidate),
'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
self.entry = tk.Entry(self, validate="key", validatecommand=self.vcmd)
self.entry.pack(side="top", fill="x")
self.select_all_text()
def select_all_text(self):
self.entry.focus()
self.entry.select_range(0,'end')
def onValidate(self, d, i, P, s, S, v, V, W):
self.root.after(1000, self.select_all_text)
return True
if __name__ == "__main__":
root = tk.Tk()
MyEntry(root).pack(fill="both", expand=True)
root.mainloop()
另外,每次按下新键时,计时器都应该重置,这样select_all_text
只有在上次按键后经过足够长的时间后才会被调用。在下面的示例中,每次按键后都会调用select_all_text
,这不是期望的行为。你知道吗
我在想,它可以跟踪自上次按键以来的时间,如果超过某个阈值,则会调用函数。这种方法也能解决问题。你知道吗
如果在tkinter中最后一次按键已经过了足够长的时间,如何调用函数?你知道吗
当您保留对
after
返回的id的引用时,可以使用after_cancel
取消它。使用此功能,您可以取消预定功能并在每次按键时重新安排:注意,我还保存了根窗口,您将它作为参数传递给
self.parent
中的MyEntry
,并使用它来调用after
。你知道吗另外,您不需要使用条目的
validatecommand
命令来执行此操作(当然,如果您已经使用了validatecommand
,您也可以这样做)。您可以将该功能绑定到每个按键:相关问题 更多 >
编程相关推荐