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 :

Récuperer la valeur d'une variable


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut Récuperer la valeur d'une variable
    Bonjour,

    Etant entrain de réaliser un prpgramme python, dans lequel je creé deux boutons qui font appel à deux fonctions qui definissent respectivement une variable x et une variable y (intVar), et incrémente de +1 la valeur de la variable (pour fonction x: y=y+1. Pour fonction y: x=x+1) .

    Ainsi, je voudrais récupérer la valeur de la variable 'modifié' défini dans l'une fonction, lors d'un click sur un bouton. Par exemple lors d'un click sur le bouton valeur x, j'obtiens comme message d'erreur: "y = y + 1 UnboundLocalError: local variable 'y' referenced before assignment"

    D'ou ma question comment récupérer la valeur modifié d'une variable sur tout le programme ?

    Mon code:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
     
     
    from Tkinter import *
     
    def clic_valeurx(event=None):
        global x
        x=10
        y = y + 1
     
     
    def clic_valeury(event=None):
       global y
       y=5
       x = x + 1
     
    root= Tk()
    root.title('Variables')
     
     
    a=IntVar()
    b=IntVar()
     
    BoutonX = Button(root, text ='Valeur Y', command = clic_valeurx)
    BoutonX.pack()
     
    BoutonY = Button(root, text ='Valeur X', command = clic_valeury)
    BoutonY.pack()
     
    BoutonQuitter = Button(root, text ='Quitter', command = root.destroy)
    BoutonQuitter.pack()
     
    root.mainloop()

    Merci d'avance.

    Cordialement.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    Je suis pas sûr d'avoir compris, mais peut-être:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    def clic_valeurx(event=None):
        global x,y
        x=10
        y = y + 1
     
     
    def clic_valeury(event=None):
       global y,x
       y=5
       x = x + 1
     
    root= Tk()
    root.title('Variables')
     
     
    a=IntVar()
    b=IntVar()
     
    BoutonX = Button(root, text ='Valeur Y', command = clic_valeurx)
    BoutonX.pack()
     
    BoutonY = Button(root, text ='Valeur X', command = clic_valeury)
    BoutonY.pack()
     
    BoutonQuitter = Button(root, text ='Quitter', command = root.destroy)
    BoutonQuitter.pack()
     
    x = 10
    y = 5
     
    root.mainloop()

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Déclarez x et y comme variables globales de vos fonctions clic_valeur{x, y} et ajoutez une ligne x = y = 0 à l'extérieur de vos fonctions pour qu'elles existent lorsqu'on en a besoin.
    note: accessoirement revoyez vos cours/tutos sur les variables globales et essayez de faire la même chose sans tkinter.

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

  4. #4
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Merci pour vos reponses.

    Je rencontre un autre probléme avec la gestion des variables:

    Dans un widget entry, je saisie une valeur numérique (Doublevar), que je voudrais récupérer dans une variable que j'utilise dans un calcul à la suite de mon programme. Le probléme est que je n'arrive pas à obtenir (enregistrer) la valeur saisie.

    J'utilise la méthonde .bind de tkinter et j'obtiens en plus de cela une erreur; "AttributeError: 'NoneType' object has no attribute 'bind'"

    Pouvez vous m'éclaire svp?


    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
    value=0
    def saisie_manuel(event=None):
        global value
        value=DoubleVar ()
        value = eval(entre1.get())
     
     
    root = Tk()
     
    entre1=Entry(root, textvariable=value).grid(row=1, column=1)
    entre1.bind('<Return>', saisie_manuel)
     
     
     
    root.mainloop()
    Merci d'avance.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Cerise22 Voir le message
    J'utilise la méthonde .bind de tkinter et j'obtiens en plus de cela une erreur; "AttributeError: 'NoneType' object has no attribute 'bind'"
    La commande "print" est ce qu'il vous faut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> e = tk.Entry()
    >>> print(e)
    .38591424
    >>> e = tk.Entry().grid()
    >>> print(e)
    None
    >>>
    Une méthode (.grid) appliqué à l'objet construit par Entry() ne retourne pas une "entry" mais None.
    Il faut écrire cela en 2 lignes.

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

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    C'est parce que entre1 n'est pas l'instance de l'Entry mais le retour de la méthode grid c'est-à-dire None.

    Sépare le grid sur la ligne suivante.

  7. #7
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Parfait, cela fonctionne, merci encore!


    Une autre question concernant la disposition des widgets dans la fenêtre de Tkinter. Je voudrais réalisé une interface utilisateur en positionnant correctement les widgets (je suis encore dans mes début avec le langage python et tkinter...).

    Quelle est la meilleur méthode (simple) a utiliser? (pack, place, grid?)



    Merci d'avance.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Cerise22 Voir le message
    Quelle est la meilleur méthode (simple) a utiliser? (pack, place, grid?)
    Vous avez une liste de tuto. tkinter en français dans cette discussion.. Outre que vous devriez en avoir un sous le coude, ils expliquent aussi, quel geometry manager utiliser suivant le cas: s'il y en a plusieurs, c'est que chacun sera adapté (ou pas) à ce que vous voulez faire.

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

  9. #9
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    J'ai opté pour la méthode grid.

    J'ai encore un probléme de variable. Je souhaite recupérer la chaine de caractére saisie dans un widget entry. Pour ce faire, j'ai fait:

    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
     
    nom=""
    def nom_personne(event=None):
        global nom
        nom=StringVar ()
        nom = eval(entre.get())
     
     
    root=Tk()
     
    entre=Entry(fenetre,width=20, relief="sunken", bd=2)
    entre.grid(row=1, column=2, ipadx= 5, pady=5)
    entre.bind('<Return>', nom_personne)
     
    root=mainloop()
    Mais je n'arrive pas à afficher dans ma variable, mon texte saisie dans l'entrée.

    Comment faire pour être amené à récuperer cette variable déclaré en chaine de caractére ?

    Merci d'avance.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Cerise22 Voir le message
    Mais je n'arrive pas à afficher dans ma variable, mon texte saisie dans l'entrée.

    Comment faire pour être amené à récuperer cette variable déclaré en chaine de caractére ?
    "afficher dans ma variable", "récuperer cette variable", "variable déclaré en chaine de caractére", ... çà ne veut rien dire.
    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    nom=""
    def nom_personne(event=None):
        global nom
        nom=StringVar ()
        nom = eval(entre.get())
    sans que quelque part vous vous disiez "je ne comprends pas ce que j'écris" c'est que vous n'avez pas assez passé de temps à potasser les tutos pour être en confiance avec fonctions, variables globales,.... des concepts qu'il faut déjà maîtriser lorsqu'on aborde la programmation d'une interface graphique.

    Je sais qu'apprendre, c'est passer des heures à taper sur un clavier pour essayer de comprendre comment fonctionne Python. Mais si vous n'avez pas pris le temps d'apprendre, impossible de penser proprement des concepts comme "variable", "fonction", ... Et si vous ne savez pas penser avec ces concepts, pas facile de coder.

    Dans un premier temps, la seule chose que vous avez à faire, c'est récupérer le contenu de l'entrée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def nom_personne(event=None):
        print (entre.get())
    Ça récupère une chaîne de caractère et çà l'affiche à la console.
    Après, si la question est cette chaîne de caractères est le nom d'une variable et c'est son contenu que je voudrais afficher, alors pas la peine de mettre tkinter au milieu de tout çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> nom = '123'
    >>> def f(v):
    ...     print (globals()[v])
    ...
    >>> f('nom')
    123
    >>>
    i.e. le nom d'une variable est clef du dictionnaire globals() - c'est ce qu'on apprend dans les tutos...
    Et on vous apprendra aussi qu'il est préférable de créer un dictionnaire spécifiques "mes_variables" plutôt que de polluer globals().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> mes_variables = dict(nom=123)
    >>> def f(v):
    ...     print (mes_variables[v])
    ...
    >>> f('nom')
    123
    >>>
    Et vous voyez que si vous essayez de faire avec tkinter (que vous découvrez) des opérations Python de base (que vous avez survolé), çà ne va pas le faire.
    note: pire, j'essaie de vous donner une solution a un problème si mal formulé que je ne suis pas sûr de ne pas perdre mon temps.

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

  11. #11
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Merci pour votre retour.

    Cordialement.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/11/2010, 16h19
  2. Récuperer la valeur d'une variable Javascript à partir de java
    Par sovo dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 26/06/2009, 21h14
  3. Récupere la valeur d'une variable d'application
    Par titan_33 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/04/2008, 09h41
  4. Récuperer la valeur d'une variable à partir de son nom
    Par Etanne dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/10/2007, 18h04
  5. Réponses: 1
    Dernier message: 18/09/2007, 16h07

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