Bonjour,
Je suis occupé à faire un petit programme en python pour m'entraîner avec Tkinter, programme qui consiste en un convertisseur de chiffres Maya en chiffres arabes. (il sera mis en open-source dès que je le termine)
J'utilise des spinbox pour ne permettre à l'utilisateur de ne choisir que des valeurs entières entre 0 et 19 (le système Maya est vicésimal).
Voici un screenshot :
http://img2.pict.com/25/d0/e3/250165...iffresmaya.png
J'ai un soucis contenant les spinbox que j'utilise dans cette application. Voici comment je les crée :
Je stocke les références des spinbox dans une liste comme attribut de classe : self.spin
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 # création des spinbox permettant de sélectionner les symboles Maya : self.spin=[] for j in range(1,9): spb = Spinbox(self.panneau_sup_a, from_=0, to=19, width=2, font=("Helvetica",20), justify=CENTER, command=lambda m=j-1:self.dcm(m)) self.spin.append( spb ) for y in range(0,8): self.spin[y].grid(row=2,column=y)
La fonction self.dcm(num) prends un numéro (de 0 à 7) qui indique quel canvas doit être redessiné au dessus du spinbox correspondant (celui qui a lancé le callback).
Mon problème est le suivant :
Quand je sélectionne mes valeurs entre 0 et 19 avec les flèches du spinbox, aucun soucis : les valeurs renvoyées sont toujours bien entières et comprises dans cet intervalle.
Quand je tape au clavier les valeurs dans le champ texte de la SpinBox : catastrophe !!!! même si j'ai réduit le champ width de la spinbox à 2 caractères, je me rends compte qu'on peut taper n'importe quoi dans la spinbox !
Quelle horreur ! J'ai donc des messages d'erreurs si l'utilisateur tape erronément un de ses chiffres...
Comment empêcher cela, et mettre en place une validation correcte, même quand la valeur du spin est tapée au clavier ?
J'ai bien vu qu'il y avait les options validate= , validatecommand= pour le spinbox... mais comment les utiliser dans mon cas ?
De plus, j'ai déjà une fonction lambda dans l'option command= , sera-t-il possible de mettre une fonction lambda supplémentaire dans la même ligne de déclaration d'un spinbox ?
Partager