【发布时间】:2018-09-29 19:36:10
【问题描述】:
问题在标题中,本质上是:在设置条目的textvariable 后,如何让validatecommand 回调继续被调用?这是最低工作示例 (MWE):
import tkinter as tk
root = tk.Tk()
sv = tk.StringVar()
def callback():
print(sv.get())
sv.set('Set Text.')
return True
e = tk.Entry(root, textvariable=sv, validate="focusout",
validatecommand=callback)
e.grid()
e = tk.Entry(root)
e.grid()
root.mainloop()
请注意,第二个 tk.Entry 小部件的存在是为了让第一个小部件失去焦点,这是我们试图捕捉的事件。
就像现在的代码一样,当您运行它时,您可以一次更改顶部 Entry 小部件的文本。它将正确设置为Set Text. 然后,如果您尝试再次更改条目的文本,新文本将在小部件中,但不会发生回调。
另一方面,如果您注释掉 sv.set('Set Text.') 代码,此行为将完全消失,并且回调会被调用多次。
我怎样才能拥有
sv.set()功能,同时在每次Entry 小部件失去焦点时仍保持回调被调用?
【问题讨论】:
标签: python python-3.x tkinter callback tkinter-entry