所以我的老师告诉我要学习Tkinter,我会尝试去理解它。 这是我正在看的程序。
它要求输入姓名和姓氏。 (是的,西班牙语是我的母语)
当我完成插入名称后,我只想按回车键转到下一个姓氏的文本框。
from tkinter import *
master = Tk()
Label(master, text="Ingrese sus nombres: ").grid(row=0)
Label(master, text="Ingrese sus apellidos: ").grid(row=1)
e1 = Entry(master)
e2 = Entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
mainloop()
答案 0 :(得分:6)
快速而肮脏的方法是var btn1 = document.querySelectorAll("a[href^='#sign-up']");
第一个bind
小部件到一个将焦点切换到另一个小部件的函数:
Entry
.bind
方法期望第一个参数是表示用户交互类型的字符串,第二个参数是单个参数的函数(事件参数。)如果您不必关心它,但如果您正在监视光标的移动,则事件可以为您提供坐标。)
对于更一般的方式,事情变得棘手,这种方法似乎比任何东西都更糟糕。无论如何,如果你有很多条目,你可以像这样自动化方法:
查找所有def go_to_next_entry(event):
e2.focus_set() # focus_set() switches the focus to the new widget
e1.bind('<Return>', go_to_next_entry)
# or, if you are familiar with lambdas, simply:
# e1.bind('<Return>', lambda e: e2.focus_set())
个小部件。他们是Entry
的孩子,你从master
得到它们,它们按照代码中声明的顺序给出了孩子。但要小心,因为你得到所有孩子(master.winfo_children()
也是如此),所以你必须过滤孩子(在这种情况下,过滤器是&#34;按类型&# 34;用Labels
)完成:
isinstance
然后,您定义将焦点切换到所需小部件的功能:
entries = [child for child in master.winfo_children()
if isinstance(child, Entry)]
部分def go_to_next_entry(event, entry_list, this_index):
next_index = (this_index + 1) % len(entry_list)
entry_list[next_index].focus_set()
在条目上循环(如果您在最后一个条目按返回,则转到第一个条目。)
最后,将switch函数绑定到每个条目:
next_index = (this_index + 1) % len(entries)
可怕的部分是:for idx, entry in enumerate(entries):
entry.bind('<Return>', lambda e, idx=idx: go_to_next_entry(e, entries, idx))
。这里的重要部分是lambda e, idx=idx: go_to_next_entry(e, entries, idx)
用于创建另一个函数(很像lambda
),它有2个参数而不是def
所需的3个参数。 go_to_next_entry
部分可以使用1个参数调用新创建的函数(根据idx=idx
的要求。)要查看为什么.bind
实际上很重要且无法省略,请看一下Generate Tkinter buttons dynamically(关于按钮,但原理是一样的。)
完整的代码:
idx=idx
答案 1 :(得分:0)
我找到了一个解决方案。
如果我们有两个条目,例如Entry_1和Entry_2,则我们希望光标首先停在Entry_1上,当我们按Enter键(或除“ Return”键之外的任何其他键)时,光标将传递到Entry_2。
entry_1.focus()
entry_1.bind("<Return>",lambda funct1:entry_2.focus())