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 :

Besoin d'un coup de main: canvas et Tkinter


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut Besoin d'un coup de main: canvas et Tkinter
    Bonjour,
    Débutant en programmation, il m'arrive très régulièrement de bloquer sur la moindre ligne de code.
    Néanmoins, même après des recherches désespérées sur internet, je suis confronté à un problème que je ne comprend pas, et que je ne sais résoudre.
    Je découvre ces derniers temps les fenêtres custom.
    J'ai voulu essayer de créer un simple point, et de le faire se déplacer sur un plan, avec les flèches du clavier.

    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
    from Tkinter import *
    x=300
    y=300
     
    def right(event):
        x+=5
    def left(event):
        x-=5
    def down(event):
        y+=5
    def up(event):
        y-=5
     
     
    fen = Tk()
     
    can = Canvas(width=600,height=600,bg="red")
    can.create_line(x,y,x,y,fill="lightblue",width="5")
    can.pack()
     
    fen.bind('<Right>',right)
    fen.bind('<Left>',left)
    fen.bind('<Up>',up)
    fen.bind('<Down>',down)
     
    fen.mainloop()
    Et j'obtient un message d'erreur à chaque fois que j'appuie sur une flèche, m'indiquant que la variable incrémenté/décrémenté n'est pas définie ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__
        return self.func(*args)
      File "C:/Users/*****/Desktop/*****.py", line 10, in down
        y+=1
    UnboundLocalError: local variable 'y' referenced before assignment
    Voilà voilà.
    La moindre aide est la bienvenue, merci d'avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut
    Je suis aussi un debutant mais je serai plus partie sur une implementation de se style, chez moi sa marche par contre je ne voit pas le point se deplacer.
    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
     
    from tkinter import *
     
     
    class Snake:
        """ Snake """
        def __init__(self):
            self.x = 300
            self.y = 300
     
            fen = Tk()
     
            can = Canvas(width=600, height=600, bg="red")
            can.create_line(self.x, self.y, self.x, self.y, fill="gainsboro", width="5")
            can.pack()
     
            fen.bind('<Right>', self.right)
            fen.bind('<Left>', self.left)
            fen.bind('<Up>', self.up)
            fen.bind('<Down>', self.down)
            fen.mainloop()
     
        def right(self, event):
            print('Right x:%i' % self.x)
            self.x += 50
     
        def left(self, event):
            print('Left x:%i' % self.x)
            self.y += 5
     
        def down(self, event):
            print('Down y:%i' % self.y)
            self.y += 5
     
        def up(self, event):
            print('Up y:%i' % self.y)
            self.y -= 5
     
    Snake()
    a+ bon courage

  3. #3
    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
    La réponse est simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    x = 0
    def f():
       global x  # << Supprimez cela
       print(x)
       x = 1  # << ou cela au choix pour comprendre
       print(x)
     
    f()
    print(x)
    L'erreur est subtile : L'assignation est locale mais l’accès aux variables vas de l'espace local au global.
    De ce fait l'erreur pointe sur la ligne du dessus (ici le print) alors que c'est l'assignation x = 1 qui la provoque.

    @+

  4. #4
    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
    J'allais oublier : 'Mais je ne fais qu'incrémenter une variable, je ne l'assigne pas'
    ben... non.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a = 1
    >>> id(a)
    10224608
    >>> a += 1
    >>> id(a)
    10224640

Discussions similaires

  1. [webdesign] Je dois reconstituer un frame : besoin d'un coup de main
    Par dom J dans le forum Balisage (X)HTML et validation W3C
    Réponses: 24
    Dernier message: 21/08/2006, 00h24
  2. Besoin d'un coup de main avec print
    Par scaleo dans le forum Langage
    Réponses: 2
    Dernier message: 10/06/2006, 21h12
  3. C++ besoin d'un coup de main
    Par Invité dans le forum C++
    Réponses: 7
    Dernier message: 19/04/2006, 13h28
  4. Problème avec fwrite() : besoin d'un coup de main
    Par yopuke dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2006, 09h43
  5. besoin d'un coup de main pour une requête ;)
    Par Fabouney dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2005, 23h14

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