如何在tkinter中传输光标?

时间:2017-10-19 15:32:14

标签: python tkinter

我在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()

怎么办?

1 个答案:

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