验证命令不在框架内的条目中执行其任务

时间:2017-12-03 15:59:27

标签: python python-3.x tkinter tkinter-entry

我不明白为什么这段代码没有执行验证命令。

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()

似乎有两个问题:

  1. 验证命令会在声明条目的位置执行一次(它根本不应该执行),我可以处理输入lambda:get_data

  2. 之后,条目不响应“focusin”。

  3. 我正在编写一个大项目,并使这个样本尽可能简单。

    谢谢大家!

1 个答案:

答案 0 :(得分:0)

来自规范tcl/tk documentation

  

一般情况下,textVariable和validateCommand混合是危险的...当你尝试将textVariable设置为validateCommand不接受的东西时,会出现危险,导致validate变为none (将不会触发invalidCommand)。当评估validateCommand发生错误时也会发生同样的情况。

由于验证命令始终返回False,因此验证命令设置为None,因为textvariable的值被视为无效。