我不明白为什么这段代码没有执行验证命令。
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root, bg="red")
canvas.grid()
frame = tk.Frame(canvas)
canvas.create_window((0,0), window=frame, anchor="nw")
txt = ["1", "2"]
def get_data():
print("AAAA")
return False
for i in range(2):
t = tk.StringVar()
t.set(txt[i])
e = tk.Entry(frame, validate="focusin", textvariable = t, state="readonly", validatecommand=get_data)
e.grid(row=i)
root.mainloop()
似乎有两个问题:
验证命令会在声明条目的位置执行一次(它根本不应该执行),我可以处理输入lambda:get_data
之后,条目不响应“focusin”。
我正在编写一个大项目,并使这个样本尽可能简单。
谢谢大家!
答案 0 :(得分:0)
来自规范tcl/tk documentation:
一般情况下,textVariable和validateCommand混合是危险的...当你尝试将textVariable设置为validateCommand不接受的东西时,会出现危险,导致validate变为none (将不会触发invalidCommand)。当评估validateCommand发生错误时也会发生同样的情况。
由于验证命令始终返回False
,因此验证命令设置为None
,因为textvariable的值被视为无效。