我第一次尝试进入小部件验证时取得了一些成功。但是,在尝试更精确地定义回调函数时,我遇到了一个问题。我想要的初始验证是限制字符数,然后在达到该限制后将焦点设置为下一个条目小部件。我成功地做到了这一点;但是,当我回去并添加一个while循环以尝试进一步将条目小部件限制为仅数字时,while循环不起作用。为什么while循环不适用?是否有另一种方法可以使用当前的回调函数完成此数字验证?
import random
import string
import tkinter as tk
window=tk.Tk()
window.geometry('325x75+750+350')
window.resizable(width=False,height=False)
window.title('Phone Number Test')
var=tk.StringVar(window,'')
def entrycheckone(inp):
while inp.isdigit:
if len(inp) == 3:
entry2.focus_set()
return True
elif len(inp)<3:
return True
else:
return False
def entrychecktwo(inp):
if len(inp) == 3:
entry3.focus_set()
return True
elif len(inp) < 3:
return True
else:
return False
def entrycheckthree(inp):
if len(inp) == 4:
entry3.focus_set()
return True
elif len(inp) < 4:
return True
else:
return False
label1=tk.Label(text='Enter Phone Number(XXX-XXX-XXXX):', font='arial 10 bold')
label1.place(anchor='nw', x=38, y=3)
entry1=tk.Entry(width=3, font='arial 10 bold')
entry1.place(anchor='nw', x=3, y=30)
entry1.focus_set()
max1 = window.register(entrycheckone)
entry1.config(validate='key', validatecommand=(max1,'%P'))
label2=tk.Label(text='-', font='arial 20')
label2.place(anchor='nw', x=30, y=19)
entry2=tk.Entry(width=3, font='arial 10 bold')
entry2.place(anchor='nw', x=47, y=30)
max2 = window.register(entrychecktwo)
entry2.config(validate='key', validatecommand=(max2,'%P'))
label3=tk.Label(text='-', font='arial 20')
label3.place(anchor='nw', x=73, y=19)
entry3=tk.Entry(width=4, font='arial 10 bold')
entry3.place(anchor='nw', x=90, y=30)
max3 = window.register(entrycheckthree)
entry3.config(validate='key',validatecommand=(max3, '%P'))
display1=tk.Entry(width=13, textvariable=var, font='arial 10 bold',state='disabled')
display1.place(anchor='nw', x=200, y=30)
def setphone():
num1 = entry1.get()
num2 = entry2.get()
num3 = entry3.get()
wholenum = ('(' + num1 + ')-' + num2 + '-' + num3)
print(wholenum)
var.set(wholenum)
button1=tk.Button(text='ENTER', font='arial 10 bold', command=setphone)
button1.place(anchor='nw', x=130, y=26)
window.mainloop()
顺便说一下,当你在这里张贴它们时,你会用什么方法将这4个额外空格添加到你的扩展代码中?我花了整整2分钟把这些空间放进去,但我知道这是一个我忽略的明显,简单的方法。 LOL
我的第二个问题是,既然我已经创建了这个使用focus_set移动到每个下一个Entry小部件的代码,我想使用退格键来完成相反的操作,将焦点移到右侧上一个小部件,直到每个小部件都清空。关于如何解决这个问题的任何建议?
感谢。