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

Python Discussion :

Récupération d'une variable entry et lecture de celle-ci par un autre script


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Stagiaire
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Par défaut Récupération d'une variable entry et lecture de celle-ci par un autre script
    Bonjour tous le monde,

    J'ai un problème avec un script tous simple où je voudrais qu'une fenêtre s'affiche en demandant à l'utilisateur de rentrer une valeur, et que cette valeur soit enregistré et utilisé dans une fonction. J'arrive à faire marcher mon script quand la fonction de traitement est écrite avec le code pour la fenêtre dans un même script. Par contre je n'arrive plus à faire marcher le programme quand j'importe ma fonction de traitement à partir d'un autre fichier .py, dans le script contenant le code pour la création de la fenêtre. Voici un exemple parce que je penses que c'est pas très clair ce que je raconte

    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
     
    import Tkinter as tk
     
    def MAJ(event):
        print(float(b.get()))
     
    a=tk.Tk()
     
    b = tk.StringVar()
     
    Entry = tk.Entry(a, textvariable=b, width=30, fg="red")
    Entry.bind("<Return>", MAJ)
    Entry.pack()
     
    a.mainloop()
    Ce code la marche et vous présente ce que je veux faire. La fonction MAJ me permet comme vous l'observez de pouvoir récupérer et utiliser le chiffre envoyé par l'utilisateur.
    Maintenant ce que je voudrais pouvoir faire :

    1er code : Nom du fichier "Fonction"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def MAJ():
        print(float(b.get()))
    2ème code : Nom du fichier "Main"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import Tkinter as tk
    from Function import MAJ
     
    a=tk.Tk()
     
    b = tk.StringVar()
     
    Entry = tk.Entry(a, textvariable=b, width=30, fg="red")
    Entry.bind("<Return>", MAJ)
    Entry.pack()
     
    a.mainloop()
    Et la mon code ne fonctionne plus, justement parce que j'appelle la fonction à partir d'un autre fichier. Je précise que je construit deux fichier différents pour diviser le code et mieux me repérer, donc je préférerai pouvoir garder deux codes plutôt que d'avoir 1000 fonctions dans le même script.
    Voilà si quelqu'un à une idée je suis preneur !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 700
    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 700
    Par défaut
    Salut,

    Citation Envoyé par clempy Voir le message
    Et la mon code ne fonctionne plus, justement parce que j'appelle la fonction à partir d'un autre fichier.
    "ne fonctionne plus" s'accompagne souvent d'un message d'erreur. Sans avoir testé, pourquoi votre fonction MAJ prendrait un paramètre lorsque "dans le même fichier" qui n'aurait plus lieu d'être lorsque définie dans un module?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Stagiaire
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    "ne fonctionne plus" s'accompagne souvent d'un message d'erreur. Sans avoir testé, pourquoi votre fonction MAJ prendrait un paramètre lorsque "dans le même fichier" qui n'aurait plus lieu d'être lorsque définie dans un module?

    - W
    C'est une erreur de ma part qu'il n'y est pas d'argument dans le code avec deux scripts. Si je ne définis aucun paramètre à ma fonction MAJ, Python m'enverra un message d'erreur en me disant que la fonction n'attend aucun argument alors que je lui en donne un. Effectivement la fonction .bind() donne un argument à la fonction qui est écrite dans la parenthèse en deuxième place :

    x.bind(event, handler)

    Si cela peut vous éclairer.
    L'erreur qui s'affiche quand je lance le programme avec les deux scripts est "Event instance has no attribute 'get' ". Ce qui me suggère que je dois définir la fonction mais dans l'autre script je n'avais pas besoin de la définir...Donc mon erreur vient d'ailleurs.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 700
    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 700
    Par défaut
    Citation Envoyé par clempy Voir le message
    L'erreur qui s'affiche quand je lance le programme avec les deux scripts est "Event instance has no attribute 'get' ". Ce qui me suggère que je dois définir la fonction mais dans l'autre script je n'avais pas besoin de la définir...Donc mon erreur vient d'ailleurs.
    Si la fonction MAJ "dans le module" est écrite ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def MAJ(event):
        print(float(b.get()))
    Vous devriez avoir comme message d'erreur un "NameError".

    Autrement dit, la variable "b" définie dans le "main" n'est pas accessible dans le module.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Stagiaire
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si la fonction MAJ "dans le module" est écrite ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def MAJ(event):
        print(float(b.get()))
    Vous devriez avoir comme message d'erreur un "NameError".

    Autrement dit, la variable "b" définie dans le "main" n'est pas accessible dans le module.

    - W
    Oui j'ai remarqué cette erreur après le post, et j'ai oublié de la corriger ici. En écrivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def MAJ(event):
        print(event.get())
    Le code me donne bien l'erreur indiquée plus haut : "Event instance has no attribute 'get' "

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 700
    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 700
    Par défaut
    Citation Envoyé par clempy Voir le message
    Oui j'ai remarqué cette erreur après le post, et j'ai oublié de la corriger ici. En écrivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def MAJ(event):
        print(event.get())
    Le code me donne bien l'erreur indiquée plus haut : "Event instance has no attribute 'get' "
    Vous avez la même erreur lorsque la fonction est définie dans le "main": la fonction recevra aussi une instance de l'objet Event. Et c'est pas l'emplacement de la fonction qui va lui ajouter/retirer des attributs.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre averti
    Homme Profil pro
    Stagiaire
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Vous avez la même erreur lorsque la fonction est définie dans le "main": la fonction recevra aussi une instance de l'objet Event. Et c'est pas l'emplacement de la fonction qui va lui ajouter/retirer des attributs.

    - W
    Je sais c'est justement la que je bloque et que je dois faire une, voir des erreurs dans mon script.

  8. #8
    Membre averti
    Homme Profil pro
    Stagiaire
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Par défaut
    C'est bon j'ai finis par trouvé un truc !
    C'est peut être par la meilleur méthode mais ça marche.

    Code principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import Tkinter as tk
    from Entry_test import fonction
     
    #Attribuer une valeur en cliquant sur un bouton 
    a=tk.Tk()
     
    b=tk.Button(a, text="activer fonction", command=fonction)
    b.pack()
     
    a.mainloop()
    Code secondaire : (Nom de fichier : Entry_test)
    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
     
    def fonction():
        import Tkinter as tk
     
        master = tk.Tk()
     
        e = tk.Entry(master)
        e.pack()
     
        e.focus_set()
     
        def callback():
            print e.get()
     
        b = tk.Button(master, text="get", width=10, command=callback)
        b.pack()
     
        master.mainloop()
    Voilà ! merci pour votre aide

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/05/2006, 23h46
  2. [Conception] récupération d'une variable php dans une autre page
    Par vali7 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/01/2006, 11h19
  3. petite question sur la récupération d'une variable
    Par minusette dans le forum Langage
    Réponses: 6
    Dernier message: 17/11/2005, 16h57
  4. [C#] Récupération d'une variable d'environnement
    Par jamy79 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 17/08/2005, 14h03
  5. Récupération d'une variable
    Par cach dans le forum Windows
    Réponses: 7
    Dernier message: 22/02/2005, 11h19

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