所以我有一些输入字段,用户需要输入他们需要的数字。
我创建了一个验证规则,以防止人们输入除数字以外的任何内容,并且我为了计算而插入了默认值0。
问题在于,现在字段不允许在输入任何更多数字之前清除其中的数字,例如,如果字段具有' 0'在它中,你必须输入0123,然后删除0得到123,如果你想改变123,你只能删除2和3,你必须输入它,然后再删除初始数字。 / p>
任何人都知道为什么会这样吗?
vcmd = (root.register(self.validate),
'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
def validate(self, action, index, value_if_allowed,
prior_value, text, validation_type, trigger_type, widget_name):
if text in '0123456789.-+*':
try:
float(value_if_allowed)
return True
except ValueError:
return False
else:
return False
我期待您的回复,我将在接下来的6个小时内定期刷新此页面,直到我得出结论!
路易斯
答案 0 :(得分:3)
问题在于您无法将空字符串转换为浮点数。
如果您想清空该条目,则value_if_allowed
会引用""
。这会传递if
比较,但在try
子句中失败。
您可以在现有if
子句中添加这样的简单测试:
if not value_if_allowed:
return True
顺便说一句,允许".-+*"
作为字符串是没有意义的,因为它们也会使转换失败。
答案 1 :(得分:3)
这种情况正在发生,因为""
并不是python中的有效浮点数。
解决方案很简单:如果要允许空字符串,请测试空字符串,如果字符串为空则返回True:
def validate(...):
if (value_if_allowed == ""):
return True
...