2017-10-19 4 views
-1

J'ai écrit le code ci-dessous dans python 3.6.2 par tkinter, je veux que le curseur se déplace vers la zone de texte du mot de passe lorsque l'utilisateur appuie sur la touche Entrée dans la zone de texte du nom d'utilisateur.Comment transférer le curseur dans tkinter?

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

Comment le faire?

+0

Essayez la technique [à ce poste] (https://stackoverflow.com/questions/16704032/comment-peut-je-définir-la-souris-position-dans-une-fenêtre-tkinter) –

Répondre

0

Ceci est en réalité beaucoup plus simple que ce à quoi je m'attendais. Nous pouvons utiliser .bind() pour obtenir un rappel sur l'événement <Return>. Cela signifie que chaque fois que le caractère de retour est pressé à chaque fois que le widget défini est en focus, nous obtenons un rappel.

Pour obtenir pour passer au widget suivant, nous pouvons utiliser this answer de Bryan Oakley:

def focus_next_window(event): 
event.widget.tk_focusNext().focus() 
return("break") 

text_widget=Text(...) text_widget.bind("<Tab>", focus_next_window) 

Quelques points importants concernant ce code:

La méthode tk_focusNext() retourne la prochaine widget dans le clavier hiérarchie traversée. la méthode focus() définit le focus sur ce widget renvoyant "break" est critique en ce qu'il empêche la classe de liaison de tirer. C'est cette liaison de classe qui insère le caractère de tabulation, que vous ne voulez pas.

Ainsi, en appliquant la même logique dans notre situation, nous pouvons utiliser quelque chose comme ci-dessous:

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