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 :

Déterminer qu'un Entry est vide


Sujet :

Tkinter Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut Déterminer qu'un Entry est vide
    Bonjour à tous

    J'ai besoin de récupérer les valeurs de 2 widgets Entry.J'ai fais des bind, pas de souci. Je dois lancer une fonction, seulement si les 2 Entry ne sont pas vides. Le souci, c'est que je n'arrive pas à savoir ce que renvoie l'Entry quand on ne rentre rien dedans. J'ai essayé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if self.entry1.get() != None:
    if self.entry1.get() != ""
    if self.entry1.get() != " "
    if self.entry1.get():
    Mais aucun ne fonctionne :s

    Avez-vous une idée ?

  2. #2
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Normalement c'est une chaîne vide : '' ou "".

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Ben justement j'ai déjà essayé ça et ça ne fonctionne pas :s

    J'ai testé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    f_data=open("data.conf","a+")
    if(self.entry1.get() != "" and self.entry2.get() != ""):
        f_data.write(self.entry1.get() + "=" + self.entry2.get() + "\n")
    f_data.close()
    Le souci c'est que ça écrit à chaque fois dans le fichier, meme si un des champs reste vide. Je me retrouve avec ça dans le fichier:

    Les deux dernières lignes ont été rentrées correctement, mais dans la troisième j'ai fais exprès de laisser le premier champ vide. On voit bien le problème :s

  4. #4
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    En effet...
    Aurais-tu affecter à ton entry un StringVar ? si oui, c'est peut-être la valeur de ce dernier qu'il faut checker, sinon, un moyen de contourner le problème, (mais qui ne le résoud pas pour autant...) serait de checker la longueur de la chaîne.

    Avant d'utiliser ce contournement, pourrais-tu tester ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    print [self.entry1.get(), self.entry2.get()]
    '''f_data=open("data.conf","a+")
    if(self.entry1.get() != "" and self.entry2.get() != ""):
        f_data.write(self.entry1.get() + "=" + self.entry2.get() + "\n")
    f_data.close()'''
    Ça afficherait juste les chaînes en brut, et permettrait de comprendre le pourquoi du comment.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Salut

    Je n'utilise pas de StringVar() et le print me sort ["",""].

    On dirait bien une chaîne vide, je ne comprend pas pourquoi ça ne fonctionne pas =s

  6. #6
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    essayes ceci maintenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    e1,e2=self.entry1.get(),self.entry2.get()
    print [e1, e2]
    print type(e1), type(e2)
    print e1=='', e2==''
    if e1 or e2:
        print 'e1==%s\ne2==%s\nshould not write...'%(e1,e2)
    else :
        print 'e1==%s\ne2==%s\nshould write...'%(e1,e2)
    '''f_data=open("data.conf","a+")
    if(self.entry1.get() != "" and self.entry2.get() != ""):
        f_data.write(self.entry1.get() + "=" + self.entry2.get() + "\n")
    f_data.close()'''

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Apparemment ça marche avec len(x) != 0, mais pas avec x.get() != "" ni x.get() != ''

    Je suis content que ça fonctionne mais j'aimerais bien comprendre le pourquoi du comment^^

  8. #8
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Moi aussi...

    pourrais-tu donner la sortie console générée par le bout de code de mon précédent message ? j'ai bien une théorie, mais je voudrais voir si elle se vérifie avant de l'exposée

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    ['','']
    <type 'str'> <type 'str'>
    True True
    should write...

  10. #10
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Ceci devrait marcher en toute logique....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    f_data=open("data.conf","a+")
    e1,e2=self.entry1.get(), self.entry2.get() ; print [e1,e2], e1 and e2
    if e1 and e2:
        f_data.write(e1 + "=" + e2 + "\n")
    f_data.close()
    En toute logique !

  11. #11
    Membre Expert 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
    Par défaut
    Drole de liévre que voila...

    Pourtant chez moi un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    elif EntryChoixAssociation.get() == '':    
        self.Wi_Quitter()
        WTitre = u'ERREUR SYSTEME'
        WTexte = u'Pas de programme sélectionner.'
        self.Dialogue_Generique(WTitre, WTexte, 250, 90)
    fonctionne et je n'utilise pas de variables style e1 ou e2...

    Et si tu fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if self.entry1.get() == '' or self.entry2.get() == '':
        pass
    else
        f_data.write(self.entry1.get() + "=" + self.entry2.get() + "\n")
    cela donne quoi ?

  12. #12
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    fonctionne et je n'utilise pas de variables style e1 ou e2...
    en fait ici, c'est juste une optimisation, le lookup des attribut d'une instance étant plus longs que le lookup de variables locales... sinon, j'aurai remplacer e1 dans la condition par str(self.entry1.get()) (même chose pour e2)...

    Je trouve cela très étrange mois aussi puisque je n'ai jamais rencontré ce problème... bizarre bizarre...

  13. #13
    Membre Expert 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
    Par défaut
    Sauf si cela viens de chez scheme...

    A tester pour scheme:

    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
    from Tkinter import Tk, Entry, Label, Button
    from string import strip
     
    def Verif():
        if x.get().strip() != '' or y.get().strip() != '':
            print x.get()
            print y.get()
     
    root = Tk()
    global x, y
    x = Entry(root)
    x.grid(row=0, column=0, columnspan=2)
     
    y = Entry(root)
    y.grid(row=0, column=2, columnspan=2)
     
    Button(root, text='Verif', command=Verif).grid(row=2, column=1, columnspan=2)
     
    root.mainloop()
    C'est tout simple et cela fonctionne.

    [Edit pour 'from string import strip' et .strip() : Hors sujet mais code plus complet pour les strings et évite les erreurs avec plusieurs espaces. A gérer avec string[x:-x] suivante les besoins]

  14. #14
    Membre Expert 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
    Par défaut
    Citation Envoyé par N.tox Voir le message
    en fait ici, c'est juste une optimisation,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le lookup des attribut d'une instance étant plus longs que le lookup de variables locales
    ... sinon, j'aurai remplacer e1 dans la condition par str(self.entry1.get()) (même chose pour e2)...
    Une entry ce n'est pas du string à tous les coups ? Dans ce cas j'ai des erreurs dans mes codes . (<)

    Merci pour le lookup (Et c'est logique).

    Idée à la c... :
    Je pense que le 'e1,e2=' de N.tox est la solution car j'ai un doute sur les 'if self.entry1.get()' de scheme...
    C'est comme si les 'if self.entry1.get()' testent la validité du get (donc toujours True ou sans erreur et jamais '' pour un widget Entry) et non la valeur... Ou du moins chez scheme. Est il possible d'avoir ta version de python (et du reste) scheme ?
    C'est space bien sur : Cela n'engage que moi et je prend sur moi (moralement bien sur) si la communauté Python porte plainte contre le site

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Ce soir je suis sous ubuntu 9.04 et python 2.5 et ton exemple fonctionne nickel pauseKawa, cet après midi j'étais sous windows xp et python 2.6.

    C'est possible que mes if envoient true à chaque fois effectivement, même si ça paraît étonnant

  16. #16
    Membre Expert 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
    Par défaut
    Surtout si mon code fonctionne lui...
    C'est exactement le même sauf les nom de variables et les parenthèses (et les strip() rajoutés bien sur).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if x.get().strip() != '' or y.get().strip() != '':
    if(self.entry1.get() != "" and self.entry2.get() != ""):
    Il me semble plus que cela viens de ton code en fait puisque le mien fonctionne.
    Les parenthèses qui gène le get ?
    Un import exotique qui remplace le widget Entry ?
    Tu as le même résultat sur différents postes ?

    Cela te donne quoi le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if self.entry1.get() == '' or self.entry2.get() == '':
        pass
    else
        f_data.write(self.entry1.get() + "=" + self.entry2.get() + "\n")
    Edit : Après test ce n'est pas les parenthèses et ton code if(self.entry1.get() != "" and self.entry2.get() != ""): fonctionne pour moi pour ce qui est de l'écriture dans data.
    Edit2 : Mauvaise indentation de f_data.write (un tab ?) ? Normalement cela retourne une erreur d'indentation mais bon...

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if self.entry1.get() == '' or self.entry2.get() == '':
        pass
    else
        f_data.write(self.entry1.get() + "=" + self.entry2.get() + "\n")
    Fonctionne bien sur ce poste sous linux, je verrais demain pour l'autre sous windows XP, il n'y a pas de raison que ça ne marche pas...

    Merci de votre aide dans tous les cas

  18. #18
    Membre Expert 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
    Par défaut
    Et bien si cela ne fonctionne pas demain avec le même code je pense que cela viens de la plateforme... (Tux/Windows)
    A tester donc ce qui fonctionne chez toi et pas demain (Pas de poste Xp sous la main).

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Ca fonctionne bien aussi sur le poste sous XP

    Honnetement je pense que l'erreur vient de moi, j'ai du faire une erreur dans le code, d'indentation ou autre, et la corriger sans le voir avec vos exemples.

    Merci encore de m'avoir aidé

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

Discussions similaires

  1. [XL-2007] Déterminer si une plage est vide
    Par Dadadidou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/02/2012, 16h25
  2. Déterminer si un dossier est vide
    Par bionicleman dans le forum Débuter
    Réponses: 6
    Dernier message: 17/02/2009, 22h31
  3. [SQL] Déterminer si le résultat d'une requête est vide ou non
    Par khamett dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/01/2008, 21h53
  4. Réponses: 6
    Dernier message: 25/07/2007, 09h54
  5. [CR] Avoir seulement une page blanche qd la base est vide???
    Par littleChick dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 13/08/2002, 18h26

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