我正在尝试向 IP 地址输入的输入框(tkinter)添加验证。它应该只允许 0 - 255 个输入,由四个点分隔。但我的代码不允许输入框中出现点。有人帮忙吗!
import tkinter as tk
def validate_ip( value_if_allowed, validation_type):
if validation_type == 'key':
try:
if value_if_allowed:
parts = value_if_allowed.split('.')
if len(parts) <= 4:
for part in parts:
if not (0 <= int(part) <= 255):
return False
else:
return False
except ValueError:
return False
return True
root = tk.Tk()
root.title("IP Address Validation")
validate_ip_entry = root.register(validate_ip)
ip_entry = tk.Entry(root, validate="key", validatecommand=(validate_ip_entry, '%P', '%v'))
ip_entry.pack(padx=10, pady=10)
root.mainloop()
目前只允许输入 255 以内的数字,但之后不允许输入点。
您可以将
int(part)
包裹在 try/except
中并删除空的 part
:
def validate_ip(value_if_allowed, validation_type):
if validation_type == 'key':
for part in value_if_allowed.split('.'):
# ignore empty string from split!
if not part:
continue
# silently convert part to int.
try:
part = int(part)
except ValueError:
return False
if not (0 <= int(part) <= 255):
return False
return True