我在tkinter的python 3.6.2中编写了下面的代码,当用户在用户名文本框中按Enter键时,我希望光标移动到密码文本框。
from tkinter import *
class Application(Frame):
def __init__(self,master):
super(Application, self).__init__(master)
self.grid()
self.create_main()
def create_main(self):
print("testing")
self.title = Label(self, text=" Stuck In The Circle ")
self.title.grid(row=0, column=2)
self.user_entry_label = Label(self, text="Username: ")
self.user_entry_label.grid(row=1, column=1)
self.user_entry = Entry(self)
self.user_entry.grid(row=1, column=2)
self.pass_entry_label = Label(self, text="Password: ")
self.pass_entry_label.grid(row=2, column=1)
self.pass_entry = Entry(self)
self.pass_entry.grid(row=2, column=2)
self.user_entry = Entry(self, justify="right")
self.pass_entry = Entry(self, justify="right")
self.sign_in_butt = Button(self, text="Sign In",command = self.logging_in)#SIGN IN BUTTON
self.sign_in_butt.grid(row=5, column=2)
def logging_in(self):
user_get = self.user_entry.get()
pass_get = self.pass_entry.get()
root = Tk()
root.title("Stuck in the Circle")
root.geometry("400x100")
app = Application(root)
root.mainloop()
怎么办?
答案 0 :(得分:0)
这实际上比我预期的要简单得多。
我们可以使用.bind()
获取<Return>
事件的回调。这意味着每当定义的窗口小部件处于焦点时按下返回字符,我们就会得到一个回调。
为了让它循环到下一个小部件,我们可以使用Bryan Oakley的this answer:
def focus_next_window(event): event.widget.tk_focusNext().focus() return("break") text_widget=Text(...) text_widget.bind("<Tab>", focus_next_window)
有关此代码的重要信息:
方法tk_focusNext()返回键盘中的下一个小部件 遍历层次结构。方法focus()将焦点设置为该窗口小部件 返回&#34;休息&#34;至关重要的是它会阻止类绑定 从射击。正是这个类绑定插入了制表符, 你不想要的。
因此,在我们的情况下应用相同的逻辑,我们可以使用类似下面的内容:
from tkinter import *
class App:
def __init__(self, root):
self.root = root
self.entry1 = Entry(self.root)
self.entry2 = Entry(self.root)
self.entry1.pack()
self.entry2.pack()
self.entry1.bind("<Return>", self.callback)
def callback(self, event):
event.widget.tk_focusNext().focus()
root = Tk()
App(root)
root.mainloop()