IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Widget entry : type de la variable


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut Widget entry : type de la variable
    Bonjour à tous,

    J'ai un problème avec le widget entry de Tkinter.
    Pour une application il doit recevoir un entier, et uniquement un entier !

    Je le crée donc comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self.la= IntVar()
    self.layer=Entry(self, textvariable=self.la, bg='red')
    Le problème est que, si l'utilisateur rentre un float par mégarde(3.3 au lieu de 33 par exemple), j'aimerai faire afficher un message d'erreur pour prévenir que la variable rentrée n'est pas de type integer. Sauf que si la variable n'est pas de type integer, la méthode .get() ne marche plus, et du coup je ne peux plus rien faire pour prévenir l'utilisateur...


    Alors du coup je passe les variables en DoubleVar, mais comment faire pour différencier un entier d'un réel dans ce cas ? Il est clair que je ne peux pas parler de partie entière si je peux l'éviter, car prendre 3 au lieu de 33 serait assez embêtant...

    Quelqu'un peut-il m'aider ?

    Merci d'avance !!!!

  2. #2
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    A mon avis, il serait préférable d'utiliser un StringVar Et de faire les corrections ensuite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class IEntry(Entry):
                def __init__(self,master=None,*cnf,**args):
                    Entry.__init__(self,master,*cnf,**args)
                    self.__var__ = StringVar(self,value="")
                    self.__var__.trace("w",self.__var_callback__)
                    self.configure(textvariable=self.__var__)
     
                def __var_callback__(self,*args):
                    txt = self.__var__.get()
                    #Tests sur txt
                    #Modifications si necessaire
                    #Affichage du message d'erreur si necessaire
                    self.__var__.set(txt)

  3. #3
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Pourquoi ne pas passer par la validation de l'Entry ?

    @+

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Salut,

    StringVar ou Entry validate, le principe reste de vérifier que chaque "caractère" saisi est valide.
    J'avais posté un brico utilisant Entry validate dont la vcmd est un callback de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      def _validate(self, action, old, ins, new):
    avec:
    - action: '1': insert, '0': delete,
    - old: l'ancien contenu de l'entry,
    - ins: les caractères insérés,
    - new: le futur contenu si _validate retourne True.
    Si on est pressé, on peut sous-classer et valider "new" via la factory du type souhaité. Exemple, pour des "doubles":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try:
           double(new)
    except:
           pass
    else:
           return True
    - W

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir wiztricks,

    Effectivement le sujet c'est de vérifier la validité de la saisie. Mais la tu vas nous perdre foudezic63
    Une validation de base comme dans ton lien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def quelletouche(event):
        global touche
        touche = event
     
    def veriftouche():
        if touche.char.isdigit() or touche.keysym == "BackSpace":
            return True
        else:
            entree.configure(validate='key', validatecommand=veriftouche)
        return False
     
    entree = Entry(F, justify=CENTER, validate='key', validatecommand=veriftouche)
    entree.bind("<Key>", quelletouche)
    me semble plus accessible.

    @+

    @wiztricks : Je n'avais pas eu le temps de revenir sur le sujet en question mais je vais regarder cela.

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Nickel merci beaucoup

    J'avais pensé à une autre méthode, faire la différence entre la valeur entrée et la valeur entière pour desceler l'erreur, mais je vais prendre votre méthode, je l'aime bien ^^

    Merci !!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E]Renvoyer le type d'une variable
    Par alexxx69 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/02/2006, 18h07
  2. Connaitre le type d'une variable
    Par mic79 dans le forum Langage
    Réponses: 2
    Dernier message: 04/01/2006, 15h42
  3. [Tkinter] ecrire un texte dans un widget entry
    Par thierry_b dans le forum Tkinter
    Réponses: 3
    Dernier message: 15/12/2005, 11h38
  4. Changer el type d'une variable sql sous postgre8/admin
    Par smag dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/08/2005, 12h31
  5. Réponses: 9
    Dernier message: 22/07/2005, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo