Python tkinter验证问题



我有以下代码片段。

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小部件发生的任何事情,包括单击它。因此,当您单击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)

许多代码都是基于这个答案的,这个答案很好地解释了验证命令。我已经更改了它,所以validate命令只在按键时调用,并创建了一个命令,该命令接受条目的值,即允许编辑和操作(插入/删除(,并将其传递给validateEntries。这在链接的答案中得到了更好的解释
验证本身已更改。如果条目的内容不是整数,则验证无效。现在,它使用try/except语句来检查它是否是整数,然后检查它的值。它还检查操作,并且只在插入时进行验证,因此使用退格不会被阻止。现在验证工作如预期。

相关内容

  • 没有找到相关文章

最新更新