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 语句来检查它是否是一个整数,然后检查它的值。它还会检查操作并仅在插入时验证,因此不会阻止使用退格键。现在验证工作正常。
我有以下代码片段。
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 语句来检查它是否是一个整数,然后检查它的值。它还会检查操作并仅在插入时验证,因此不会阻止使用退格键。现在验证工作正常。