Bonjour,
Je veux inspecter une chaine de caractère à chaque frappe de touche.
J'essaye de le faire en capturant l'événement <Key> puis en récupérant la chaine avec get(). Le problème est que get() me donne la chaine privée de la dernière frappe. Je peux récupérer cette frappe avec event.char, mais ça ne m'avance pas tellement car je ne sais pas où est le curseur au moment de la frappe. Pour illustrer ma question, j'ai programmé une calculette qui est supposée donner le résultat en cours de frappe. Tout marche bien sauf si je m'amuse à saisir des choses au milieu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 import tkinter as tk from math import * import string res='' res0='' def evaluer(event): global res, res0, tk_texte, tk_resultat # problème : cette ligne ne récupère pas le dernier caractère ! txt = tk_entree.get() # Je peux le rajouter comme ça, mais ça ne marche que si le curseur est en fin de ligne. if event.char in string.printable: txt += event.char tk_texte.configure(text = txt) try: res0 = res res = '= ' + str(eval(txt)) except: if res[-1] != '?': res=res0 + '?' tk_resultat.configure(text = res) # change l'attribut text de l'objet resultat # ----- Programme principal : ----- # création des objets tinker tk_fenetre = tk.Tk() # crée la fenêtre principale tk_entree = tk.Entry(tk_fenetre) # crée un objet "ligne de saisie" dans fenetre tk_texte = tk.Label(tk_fenetre) # crée un objet texte dans fenêtre tk_resultat = tk.Label(tk_fenetre) # crée un objet texte dans fenêtre # mise en page tk_entree.pack() # dispose entree dans la fenêtre, à la taille minimum tk_texte.pack() tk_resultat.pack() # définition des événements tk_entree.bind("<Key>", evaluer) # la touche return dans entrée appelle evaluer # lancement tk_entree.focus_set() # donne le focus à la boite de saisie tk_fenetre.mainloop() # lance l'appli
Partager