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