Python,TK Entry字段验证

时间:2014-09-05 13:25:59

标签: python-3.x tkinter

所以我有一些输入字段,用户需要输入他们需要的数字。

我创建了一个验证规则,以防止人们输入除数字以外的任何内容,并且我为了计算而插入了默认值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个小时内定期刷新此页面,直到我得出结论!

路易斯

2 个答案:

答案 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
    ...