Python tkinter 验证问题

Python tkinter validate issue

我有以下代码片段。

def validateEntries():
    x1 = entry1.get()
    if len(int(x1)) > 5:
        return False
    
entry1 = Entry(window, validate='all', validatecommand=validateEntries)

知道为什么条件不起作用吗?

确实出现了以下错误:

invalid literal for int() with base 10:

目前,您正在验证 Entry 小部件发生的任何事情,包括单击它。因此,当您单击条目时,它会调用 validateEntries。空条目的值为 ""。这不能转换为数字,所以你会得到一个错误。相反,使用这样的验证命令:

def validateEntries(x1, action):
    if action == "1": #Insertion
        try:
            int(x1) # Attempt to convert to an integer
        except:
            return False # If that fails, return False
        else:
            print(int(x1))
            if int(x1) <= 5: # If it succeeds, try validation like before
                return True
    else:
        return True # Allow backspace
    return False # If no other value is returned, return False
    

window = Tk()
vcmd = (window.register(validateEntries), "%P", "%d")
entry1 = Entry(window, validate='key', validatecommand=vcmd)

很多代码都基于 this answer,它很好地解释了验证命令。我已经更改了它,因此仅在按键时调用验证命令并创建了一个命令,该命令采用条目的值是允许编辑和操作 (insert/delete) 并将其传递给 validateEntries。这在链接的答案中有更好的解释。
验证本身已经改变。如果 Entry 的内容不是整数,则验证无效。现在它使用 try/except 语句来检查它是否是一个整数,然后检查它的值。它还会检查操作并仅在插入时验证,因此不会阻止使用退格键。现在验证工作正常。