Outils pour utilisateurs

Outils du site


valid_car_entry

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
valid_car_entry [2008/05/21 07:59]
tyrtamos
valid_car_entry [2009/10/17 17:11] (Version actuelle)
tyrtamos
Ligne 1: Ligne 1:
-====== Comment ​limiter la saisie à certains caractères ​dans un widget "​Entry"​ ======+====== Comment ​maitriser l'​édition caractère par caractère ​dans un widget "​Entry"​ ======
  
 ===== Objectif ===== ===== Objectif =====
  
-Dans certains cas de saisie de données, il vaut mieux vérifier caractère ​par caractère ​que d'​attendre la sortie du widget (perte de focus) ou même la fin d'une saisie complète pour découvrir qu'il y a des caractères interdits dans une valeur. Par exemple, ​il y la lettre "​O"​ dans un code postal ​français.+Dans certains cas de saisie de données, il vaut mieux vérifier ​chaque ​caractère ​pour l'​empêcher ou pour le modifier, ​que d'​attendre la sortie du widget (perte de focus) ou même la fin d'une saisie complète pour découvrir qu'il y a des caractères interdits ​ou inadaptés ​dans une valeur. Par exemple, ​on peut vouloir empêcher ​la lettre "​O"​ dans un code postal, ou convertir les caractères accentués en non-accentués.
  
 ===== Principe ===== ===== Principe =====
  
 On utilise des options du widget Entry (validate et validatecommand) qui, curieusement,​ ne sont pas dans le manuel Tkinter de Mexico (2008). Par contre, ils se trouvent ici: [[http://​effbot.org/​tkinterbook/​entry.htm]]. On utilise des options du widget Entry (validate et validatecommand) qui, curieusement,​ ne sont pas dans le manuel Tkinter de Mexico (2008). Par contre, ils se trouvent ici: [[http://​effbot.org/​tkinterbook/​entry.htm]].
 +
 +===== Comment empêcher certains caractères =====
  
 Dans l'​exemple ci-dessous, on veut limiter la saisie à soit un chiffre (de 0 à 9), soit la touche backspace. Dans l'​exemple ci-dessous, on veut limiter la saisie à soit un chiffre (de 0 à 9), soit la touche backspace.
Ligne 80: Ligne 82:
 app=Application(fen) app=Application(fen)
 fen.mainloop() fen.mainloop()
 +</​code>​
  
 +===== Comment convertir certains caractères au fur et à mesure qu'ils sont tapés =====
 +
 +On utilise la même technique que précédemment.
 +
 +<code python>
 +#​!/​usr/​bin/​python
 +# -*- coding:​utf-8 -*-
 +
 +from __future__ import division
 + 
 +import Tkinter
 +
 +##################################################################​
 +class Application(Tkinter.Frame):​
 + 
 +    def __init__(self,​ master=None):​
 + 
 +        Tkinter.Frame.__init__(self,​ master)
 + 
 +        self.grid()
 +        self.varsaisie = Tkinter.StringVar()
 +        self.varsaisie.set(""​)
 +        self.saisie=Tkinter.Entry(self, ​ background="​white",​ width=50, textvariable=self.varsaisie)
 +
 +        self.saisie.bind("<​Key>",​ self.quelletouche)
 +        ​
 +        self.saisie.grid(row=0,​column=0,​padx=3,​ pady=6)
 +        self.saisie.focus_set()
 +
 +        self.alpha1 = u"​àÀâÂçÇéÉèÈêÊëËîÎïÏôÔùÙûÛüÜÿŸ"​
 +        self.alpha2 = u"​aAaAcCeEeEeEeEiIiIoOuUuUuUyY"​
 + 
 +    def quelletouche(self,​ event):
 +        self.touche=event
 +        self.saisie.configure(validate="​key",​validatecommand=self.veriftouche)
 + 
 +    def veriftouche(self):​
 +        i = self.alpha1.find(self.touche.char)
 +        if i>=0:
 +            self.saisie.event_generate(self.alpha2[i])
 +            return False
 +        else:
 +            return True
 +        ​
 +##############################################################################​
 +# lancement et affichage au centre de l'​écran de l'​application
 +#
 +if __name__ == "​__main__":​
 +    fen=Tkinter.Tk()
 +    fen.title(u"​Saisie controlée"​)
 +    app=Application(fen)
 +    fen.mainloop()
 </​code>​ </​code>​
 +
 +\\
 +Amusez-vous bien!
  
  
valid_car_entry.txt · Dernière modification: 2009/10/17 17:11 par tyrtamos