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 :
Quelqu'un a-t-il une solution?
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()
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.
Partager