Bonjour, j'ai trouvé comment limiter la saisie d'un entry sur ce post : http://www.developpez.net/forums/sho...d.php?t=382534
Et cela fonctionne si on appuie précisément sur une touche à la fois.

Donc mon problème est que si par chance on appuie sur deux touches en même (genre faute de frappe), cela ne fonctionne plus du tout!!! Tout controle semble bloqué et n'importe quel caractère est affiché dans l'entry.

voici le code que j'utilise :

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
# -*- coding:Latin-1 -*-
 
from Tkinter import *
global touche
def onKey(event):
    global touche
    touche = event
 
def val(event):
    global touche
    print touche
    print touche.char
    if touche:
        if touche.char in "0123456789:":
            return True
        else:
            if touche.keysym == "BackSpace":
                return True
            else:
                return False
def ins12():
    #txt.event_generate("<KeyPress-0>")
    txt.insert(END, "12")
    print "inséré"
 
root = Tk()
txt = Entry(root)
txt.pack()
but=Button(root, text="insert 12", command=ins12)
but.pack()
txt.configure(validate="key",validatecommand=lambda : val(touche))
txt.bind("<Key>",onKey)
root.mainloop()
Quelqu'un a-t-il une solution?

PS : attention également avec ce code, comme la validation dépend de la variable "touche", si vous voulez insérer quelque chose dans l'entry après avoir appuyé sur une touche non comprise dans le test de validation, l'insertion ne se fera pas. Cela peut etre contourné en faisant un entry.event_generate("<KeyPress-unebonnetouche>") juste avant l'insertion de façon à ce que la variable "touche" soit dans la liste des caractères acceptés.