所以如果我想将值限制在 100 到 200 之间...
import tkinter as tk
master = tk.Tk()
def validatePLZ(index, value_if_allowed):
print("validatePLZ with index:%s and proposed value:%s" % (index, value_if_allowed))
if int(index) > 3 or len(value_if_allowed) > 3:
return False
print("Not too long")
value = int(value_if_allowed)
print("Considering value: ", value)
if value < 100 or value > 200:
return False
return True
vcmd = (master.register(validatePLZ), '%i', '%P')
ent = tk.Entry(master, validate="key", validatecommand=vcmd)
ent.insert(0, "150")
ent.pack()
tk.Button(master, text="Validate").pack()
tk.mainloop()
这在不太严格的条件下有效,允许零,但如果该值为“150”,并且我尝试通过突出显示“5”并输入“7”来更改为“170”,我看到的是:
删除“5”,结果为“10”
删除失败后添加“7”,结果为“1570”
但是它在#1 上失败了,所以它不起作用。如果只是删除一个字符,我仍然希望 #1 发生,但是如何将突出显示替换合并到一个检查中?或者我怎么知道它是突出显示替换而不是简单的删除?
这在不太严格的条件下有效,允许零,但是 如果该值为“150”并且我尝试更改为“170” 突出显示“5”并输入“7”我看到的是:
删除“5”,结果为“10”
删除失败后添加“7”,结果为“1570”
但是它在#1 上失败了,所以它不起作用。我仍然希望#1发生 如果只是删除一个字符,但是如何突出显示替换 合并为一张支票?或者我怎么知道它是否是突出显示替换 而不是简单的删除?
问题可以解决。
return False
更改为 return True
。or
更改为 and
布尔值更改 > 200
为 < 200
。片段:
def validatePLZ(index, value_if_allowed):
print("validatePLZ with index:%s and proposed value:%s" % (index, value_if_allowed))
if int(index) > 3 or len(value_if_allowed) > 3:
return True
print("Not too long")
value = int(value_if_allowed)
print("Considering value: ", value)
if value < 100 and value < 200:
return False
return True
首次启动截图:
截图。将光标置于末尾并使用退格键删除:
截图。删除退格键后,您可以在调试中看到打印 15:
截图。将光标放在 5 和 0 之间并使用退格键(您可以在调试中看到)打印 10:
截图。输入5和0之间的7。在debug中可以看到打印1570:.
截图。突出显示 5 以删除。可以在debug中看到打印170:
此后,用户将无法进入
Entry
小部件。
希望,如果这是你想要的,