通过多个条目小部件/验证问题进行退格

时间:2018-03-31 09:27:06

标签: python validation tkinter

我第一次尝试进入小部件验证时取得了一些成功。但是,在尝试更精确地定义回调函数时,我遇到了一个问题。我想要的初始验证是限制字符数,然后在达到该限制后将焦点设置为下一个条目小部件。我成功地做到了这一点;但是,当我回去并添加一个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小部件的代码,我想使用退格键来完成相反的操作,将焦点移到右侧上一个小部件,直到每个小部件都清空。关于如何解决这个问题的任何建议?

感谢。

0 个答案:

没有答案