【发布时间】:2019-08-14 09:45:47
【问题描述】:
我使用 Tkinter 条目将 IPv4 地址作为用户的输入,我更喜欢使用小部件的 validatecommand 属性,它只允许格式为 XXX.XXX.XXX.XXX 的条目,即 X 位。
问题可以通过 re 模块与表达式匹配条目来解决 ^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$但我想提前做。
我尝试过如下使用 ipaddress 模块:
import tkinter as tk
import ipaddress as ip
import re
def validate(value):
if ip.ip_address(value):
return True
return False
window = tk.Tk()
tk.Label(window, text = "IP", font = 'Arial 10 bold').grid(row = 0, column = 0, padx = 5, pady = 5, sticky = 'ew')
varip = tk.StringVar()
vcmd = window.register(validate)
ipadd = tk.Entry(window, textvariable = varip, width = 23, validate = 'key', validatecommand = (vcmd, '%P'))
ipadd.grid(row = 0, column = 1, padx = 5, pady = 5)
window.mainloop()
问题是只有引入的第一个字符被检查为 IPv4 地址,并且允许所有字符,不仅是数字和点。
怎么可能?
【问题讨论】:
-
如果我正确理解了您的查询,您是否在验证正确的 IPv4 地址时遇到了麻烦?
-
问题是 Tkinter Entry 小部件允许我从键盘引入所有字符,我想限制它只接受数字和点。 IPv4 地址是否正确的验证可以在之后进行。也许我没有很好地解释自己xd。
-
您是否在问如何将输入限制为仅数字和句点字符?你见过stackoverflow.com/a/4140988/7432吗?
标签: python python-3.x validation tkinter tkinter-entry