我有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
答案 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()