经典和ttk小部件之间的条目小部件验证差异

时间:2016-10-29 02:03:54

标签: python tkinter ttk

我发现Python 3.5中经典和ttk小部件之间的Entry小部件验证存在意想不到的差异。

使用经典小部件:

from tkinter import *

def validate(reason):
  print("--> validate:", reason)
  return(True)

def change():
  var.set("data")

root = Tk()
vc = root.register(validate)
var = StringVar()
Entry(root, textvariable = var, validate = "all", validatecommand = (vc, "%V")).pack()
Button(root, text = "Change", command = change).pack()

root.mainloop()

使用ttk小部件:

from tkinter import *
from tkinter.ttk import *
... same code as above

使用经典小部件时,按下“更改”按钮时,将使用reason ==“forced”调用validate函数,这似乎符合Tk doc。使用ttk小部件时,按下“更改”按钮时,不会调用验证功能。否则,验证函数似乎具有两种情况的等效行为。任何人都知道这是一个错误还是一个功能?

1 个答案:

答案 0 :(得分:1)

这是一个功能。根据{{​​3}}:

  

传统知识进入WIDGET验证的差异

     

标准的Tk条目小部件会自动禁用验证(通过   如果-validatecommand或-invalidcommand,则设置-validate为none   修改条目的值。 Tk主题条目小部件仅禁用   验证其中一个验证脚本是否引发错误,或者是否   -validatecommand不返回有效的布尔值。 (因此,在修改条目值后无需重新启用验证   在验证脚本中。)

     

此外,标准条目小部件每当调用时都会调用验证   链接-text变量被修改; Tk主题条目小部件没有。