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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    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 confirmé
    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    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 confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    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 confirmé
    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    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

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