输入条目后

时间:2018-08-05 10:13:12

标签: python-3.x tkinter focus tkinter-entry

我有4个输入字段,我想写一个字母后将焦点切换到下一个字段。所以基本上我想写4个字母,每个字母都在另一个字段中,而不用触摸鼠标或Tab键。

from tkinter import *

root = Tk()
r1= StringVar()
r2= StringVar()
r3= StringVar()
r4= StringVar()

e1=Entry(root, textvariable=r1)
e1.pack()

e2=Entry(root, textvariable=r2)
e2.pack()

e3=Entry(root, textvariable=r3)
e3.pack()

e4=Entry(root, textvariable=r4)
e4.pack()

list=[e1,e2,e3,e4]
for i, element in enumerate(list):
    lista=[r1,r2,r3,r4]
    element.focus()
    while lista[i].get() == "":
        pass

root.mainloop()

我该怎么做? 感谢您的帮助:D

2 个答案:

答案 0 :(得分:0)

尝试类似的东西:

all_typed = False
e1.focus()
boxes = [e1, e2, e3, e4]
focused = 0
while not all_typed:
    if focused > 3:
        all_typed = True
    elif boxes[focused].get() != "":
        focused += 1
        boxes[focused].focus()

不是我最好的代码,但是应该可以。我对TK不太熟悉,所以我不知道这是否会阻止应用程序运行或其他任何原因。

答案 1 :(得分:0)

您的原始代码在到达root.mainloop()之前已挂起,因为Entry()字段将永远不会被编辑。您必须使用Tk事件,例如打包输入字段后,您可以尝试以下操作:

liste=[e1,e2,e3,e4]
e1.focus()
curre=0
def nexte(e):
    global curre
    curre+=1
    if (curre<4):
        liste[curre].focus()
    else:
        root.unbind("<Key>")
        # we've got input into the last field, now do sth useful here...

root.bind("<Key>",nexte)

root.mainloop()