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 :

Problème de variable globale


Sujet :

Tkinter Python

  1. #1
    Rédacteur
    Avatar de Yoshidu62
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 294
    Points : 374
    Points
    374
    Par défaut Problème de variable globale
    Bonsoir,

    je me forme actuellement à Python à l'aide du livre de Gérard Swinnen (O'reilly), et je bloque sur un exercice (8.12 page 100).

    Voici mon source :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    # -*- coding:Utf-8 -*-
     
    #####################
    # Script python 2.4 #
    # Formation         #
    #####################
     
     
     
    from Tkinter import *
     
    def deplacement(gd, hd, indice):
        "Fonction globale pour le déplacement"
        if(indice == 1):
    	global x1, y1
    	x1, y1 = x1+gd, y1+hd
    	can.coords(astre1, x1, y1, x1+10, y1+10)
        else:
    	global x2, y2
    	x2, y2 = x2+gd, y2+hd
    	can.coords(astre2, x2, y2, x2+10, y2+10)
     
     
    def depl_gauche(indice):
        "Déplacement d'un astre à gauche"
        deplacement(-10, 0, indice)
     
    def depl_droite(indice):
        "Déplacement d'un astre à droite"
        deplacement(10, 0, indice)
     
    def depl_haut(indice):
        "Déplacement d'un astre vers le haut"
        deplacement(0, -10, indice)
     
    def depl_bas(indice):
        "Déplacement d'un astre vers le bas"
        deplacement(0, 10, indice)
     
     
    # coordonnées de l'astre 1 déclarées en global
    x1, y1 = 20, 20 # coordonnées initiales
     
    # coordonnées de l'astre 2 déclarées en global
    x2, y2 = 120, 120 # coordonnées initiales
     
    fen = Tk() # création de la fenêtre
     
    # création des boutons pour diriger l'astre 1
    Button(fen, text = 'Gauche', command = depl_gauche(1)).grid(row = 1, column = 1, sticky = E)
    Button(fen, text = 'Droite', command = depl_droite(1)).grid(row = 2, column = 1, sticky = E)
    Button(fen, text = 'Haut', command = depl_haut(1)).grid(row = 3, column = 1, sticky = E)
    Button(fen, text = 'Bas', command = depl_bas(1)).grid(row = 4, column = 1, sticky = E)
     
    # création du canevas central
    can = Canvas(fen, width = 200, height = 200, bg = 'white')
    can.grid(row = 1, column = 2, rowspan = 4, padx = 5, pady = 5)
     
    # création de l'astre 1
    astre1 = can.create_oval(x1, y1, x1+10, y1+10, fill = 'red')
     
    # création de l'astre 2
    astre2 = can.create_oval(x2, y2, x2+10, y2+10, fill = 'blue')
     
    # création du label central
    Label(fen, text = 'Distance').grid(row = 5, column = 2)
     
    # création des boutons pour diriger l'astre 2
    Button(fen, text = 'Gauche', command = depl_gauche(2)).grid(row = 1, column = 3, sticky = W)
    Button(fen, text = 'Droite', command = depl_droite(2)).grid(row = 2, column = 3, sticky = W)
    Button(fen, text = 'Haut', command = depl_haut(2)).grid(row = 3, column = 3, sticky = W)
    Button(fen, text = 'Bas', command = depl_bas(2)).grid(row = 4, column = 3, sticky = W)
     
    fen.mainloop()
    A l'exécution j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NameError: global name 'can' is not defined
    Je ne comprends pas mon erreur, je me base sur un exemple du livre donc tout semble correct.

    Si quelqu'un pouvait m'aider.

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    C'est normal, quand tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button(fen, text = 'Gauche', command = depl_gauche(1)).grid(row = 1, column = 1, sticky = E)
    la fonction depl_gauche est tout de suite appelée et can n'a pas encore été créé.
    Soit ta fonction n'a pas de paramètre => http://python.developpez.com/faq/?pa...#ButtonCommand
    soit tu dois passer par les lambdas (une recherche dans ce forme devrait te donner la syntaxe à utiliser (avant que je complète la FAQ car la question assez récurrente))

  3. #3
    Rédacteur
    Avatar de Yoshidu62
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 294
    Points : 374
    Points
    374
    Par défaut
    Merci, j'ai pu corriger l'erreur.

    Mais bon il ne se passe rien quand je clique sur mes boutons, normalement cela devrait changer les coordonnées de mes cercles et donc les déplacer.

    Mais il ne se passe rien, une idée?

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

Discussions similaires

  1. Problème sur Variable globale
    Par diamonds dans le forum Langage
    Réponses: 1
    Dernier message: 16/03/2007, 10h52
  2. Réponses: 4
    Dernier message: 04/02/2007, 19h39
  3. Réponses: 2
    Dernier message: 25/12/2006, 19h08
  4. Problème de variable globale
    Par Oberown dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/08/2006, 11h57
  5. Problème de variable globale
    Par Tournevyks dans le forum Général Python
    Réponses: 6
    Dernier message: 29/06/2006, 11h16

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