<p>在问题中,当您删除一个选择时,validatecontent中的<code>var</code>参数是一个字符串,例如“0,0”,它使您的验证例程失败。你知道吗</p>
<p>是否只接受有效的浮点字符串?
您需要像“1234.45”或“123,45”这样的字符串吗?你知道吗</p>
<p>下面我假设“123,45”</p>
<p>Validatecontent在用“.”替换任何“,”之后尝试将字符串转换为浮点。你知道吗</p>
<p>如果可以,则返回true,否则仅当字符串为空时才返回true。你知道吗</p>
<pre><code>from tkinter import *
root = Tk()
def validatecontent(var): # Amended var is now the complete string.
try:
temp = var.replace(',', '.') # Replace ','' with '.' for float conversion assumes , is decimal point.
# temp = var.replace(',',"") # Or replace , with empty if , is a thousands delimiter.
fl = float(temp)
# if temp converts to a float return length of string is less than 7
return len(var) < 7
except ValueError:
return var == "" # If it doesn't convert to a float only accept an empty string.
vcmd = (root.register(validatecontent), '%P') # '%P' passes the whole new string to validate content.
entry = Entry(root, validate='key', validatecommand=vcmd) # Validate on key only.
entry.pack()
root.mainloop()
</code></pre>
<p>可能有更好的验证函数涉及正则表达式。不过,这很容易理解。如果需要,该条目仍然可以链接到StringVar。不过,不需要进行验证。你知道吗</p>