我是Python和Tkinter的新手,所以很可能我在做一些傻事。以下程序正常工作(验证函数对于有效条目返回True,对于无效条目返回False),除了一件事:oldvalue==newvalue always。如果我键入“xxx”,它就会打印“错误!”但值保持为“xxx”。验证应该在更改发生之前进行,错误的返回应该可以防止更改发生,对吗?在
import Tkinter as tk
root = tk.Tk()
def makeEntries():
wnames = []
def f(name, newvalue, oldvalue):
name = name[name.rfind('.')+1:]
print 'validating', name, newvalue, oldvalue
for i, wn in enumerate(wnames):
if wn == name:
if newvalue.isdigit():
return True
else:
print 'wrong!'
return False
else:
raise RuntimeError('Kaput!')
vcmd = root.register(f)
frame = tk.Frame(root)
for i in range(10):
w = tk.Entry(frame, width=4, justify=tk.RIGHT,
validate='focusout',
validatecommand=(vcmd, '%W', '%P', '%s'))
w.pack()
name = w.winfo_name()
print i, name
wnames.append(name)
return frame
e = makeEntries()
e.pack()
root.mainloop()
在
"focusout"
上验证无法防止错误值验证机制不会删除小部件中的字符。它只能防止在用户键入时输入字符。在相关问题 更多 >
编程相关推荐