Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
valid_car_entry [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


valid_car_entry

Warning: Undefined array key -1 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1458

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
Prochaine révision
Révision précédente
valid_car_entry [2008/05/21 07:56]
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!
 +
 +
 +<html>
 +<head>
 +<style type="text/css">
 +<!--
 +body {background-image:url(fondcorps.jpg);}
 +-->
 +</style>
 +</head>
 +<body>
 +</body>
 +</html>
valid_car_entry.1211349398.txt.gz · Dernière modification: 2008/05/21 07:56 de tyrtamos