2017-01-05 6 views
0

Comment je peux sélectionner tout le texte comme un bloc en utilisant clic + drogue gauche de la souris dans le widget d'entrée tkinter python.CTRL + un tout sélectionner dans le widget d'entrée tkinter python

e1 = tk.Entry(bop, width = 50, font = "Helvetica 13") 
e1.grid(row=1,column=1, padx=15, pady=15) 
e1.bind_class("Entry","<Control-a>", select_all(e1)) 

est ici la fonction de select_all():

def select_all(e): 
    a = e.select_range(0,tk.END) 
+0

'bind' attend le nom de la fonction (callback) - cela signifie sans'()) et arguments. Vous pouvez créer une fonction sans arguments qui utilise votre fonction avec des arrangements, ou utiliser lambda: 'bind (..., lambda: select_all (e1))' – furas

+0

BTW: 'Entry' a la méthode' get() 'pour obtenir tout le texte. – furas

Répondre

4

Il y avait tant d'exemples similaires sur le SO

import tkinter as tk 

def callback(event): 
    print('e.get():', e.get()) 
    # or more universal 
    print('event.widget.get():', event.widget.get()) 
    # select text after 50ms 
    root.after(50, select_all, event.widget) 

def select_all(widget): 
    # select text 
    widget.select_range(0, 'end') 
    # move cursor to the end 
    widget.icursor('end') 

root = tk.Tk() 

e = tk.Entry(root) 
e.pack() 
e.bind('<Control-a>', callback) 

root.mainloop() 

bind sans nom de fichier () attend et arguments (rappel). Mais aussi bind exécute cette fonction toujours avec un argument event qui donne accès à l'entrée qui a exécuté cette fonction event.widget de sorte que vous pouvez l'utiliser avec de nombreuses entrées différentes. Et enfin Entry a .get() pour obtenir tout le texte.


EDIT:

Parce que après avoir relâché les touches <Control-a> sélection est supprimée si j'utilise after() pour exécuter la sélection après 50ms. Il sélectionne tout le texte (mais déplace le curseur au début) et déplace le curseur jusqu'à la fin. (Voir code ci-dessus)


EDIT:

Avant que je ne pouvais pas trouver la bonne combinaison avec Release, mais il doit être <Control-KeyRelease-a> et maintenant il n'a pas besoin after()

import tkinter as tk 

def callback(event): 
    print('e.get():', e.get()) 
    # or more universal 
    print('event.widget.get():', event.widget.get()) 

    # select text 
    event.widget.select_range(0, 'end') 
    # move cursor to the end 
    event.widget.icursor('end') 

root = tk.Tk() 

e = tk.Entry(root) 
e.pack() 
e.bind('<Control-KeyRelease-a>', callback) 

root.mainloop() 
+0

Bien que votre exemple soit utile, il ne répond pas entièrement à la question. Pouvez-vous modifier votre méthode 'callback' pour réellement faire la fonctionnalité" select all "? –

+0

J'ai ajouté travailler 'select_all' (@BryanOakley) – furas

+0

J'ai trouvé' 'et maintenant il n'a pas besoin' after() ' – furas