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 :

classe qui ne fonctionne pas (pas d' "Erreur" non plus) [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    collégien
    Inscrit en
    Juillet 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : collégien
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 12
    Points : 14
    Points
    14
    Par défaut classe qui ne fonctionne pas (pas d' "Erreur" non plus)
    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 *
    class snake :
    	def __init__(self):
    		self.fen=Tk()
    		self.can=Canvas(self.fen, height=500, width=500)
    		self.can.pack()
    		self.snakelenth = []
    		self.snakelenth.append(self.can.create_rectangle(250, 250, 260, 260))
    		self.can.bind('<Up>', self.my_up)
    		self.can.bind('<Down>', self.my_down)
    		self.can.bind('<Left>', self.my_left)
    		self.can.bind('<Right>', self.my_right)
    		self.move(0, 0)
    		self.fen.mainloop()
    	def move(self, x, y):
    		print(self.snakelenth)
    		copy = self.can.coords(self.snakelenth[0])
    		self.can.coords(self.snakelenth[0], copy[0]+x, copy[1]+y, copy[2]+x, copy[3]+y)
    	def my_up(self, event):
    		self.move(0, -10)
    	def my_down(self, event):
    		self.move(0, 10)
    	def my_left(self, event):
    		self.move(-10, 0)
    	def my_right(self, event):
    		self.move(10, 0)
    les touches ne font rien...

  2. #2
    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 ta fenêtre qui a le focus, alors comme ceci ça ira mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            self.fen.bind('<Up>', self.my_up)
            self.fen.bind('<Down>', self.my_down)
            ...

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

    En supposant que vous avez posté "tout le code", une classe ne fait rien tant qu'elle n'a pas été "instanciée".
    C'est pareil que pour les fonctions.
    Créer une fonction ne fait rien d'autre que créer la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> def foo():
    ...     print('foo')
    ...
    >>>
    Ce n'est que lorsqu'elle sera appelée que seront exécutées les instructions contenues dans sa définition.
    Les classes et la POO sont bien plus compliquées que les fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> class A:
    ...    def __init__(self): print ('A.__init__')
    ...
    >>>
    ne fait rien d'autre que définir la classe A.
    Si on veut qu'il se passe quelque chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> A()
    A.__init__
    <__main__.A instance at 0x021CF648>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre à l'essai
    Homme Profil pro
    collégien
    Inscrit en
    Juillet 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : collégien
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Merci, mais ça ne marche toujours pas
    nouveau 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
    from tkinter import *
    class snake :
    	def __init__(self):
    		self.fen=Tk()
    		self.can=Canvas(self.fen, height=500, width=500)
    		self.can.pack()
    		self.snakelenth = []
    		self.snakelenth.append(self.can.create_rectangle(250, 250, 260, 260))
    		self.fen.bind('<Up>', self.my_up)
    		self.fen.bind('<Down>', self.my_down)
    		self.fen.bind('<Left>', self.my_left)
    		self.fen.bind('<Right>', self.my_right)
    		self.move(0, 0)
    		self.fen.mainloop()
    	def move(self, x, y):
    		copy = self.can.coords(self.snakelenth[0])
    		self.can.coords(self.snakelenth[0], copy[0]+x, copy[1]+y, copy[2]+x, copy[3]+y)
    	def my_up(self, event):
    		self.move(0, -10)
    	def my_down(self, event):
    		self.move(0, 10)
    	def my_left(self, event):
    		self.move(-10, 0)
    	def my_right(self, event):
    		self.move(10, 0)

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

    Je me disais bien aussi que la réponse de VinsS était bien trop intelligente
    Si vous n'instanciez pas la classe, çà ne fait rien d'autre que définir la classe.
    Et pour faire çà, il suffit de terminer votre script par l'instruction "snake()".

    Essayez voir.

    Si vous ne maîtrisez pas encore les classes, le bout de code que vous écrivez n'en a pas besoin.
    Fonctionnellement, le code suivant fait la même chose que le votre avec beaucoup moins de "turlu":

    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
    import tkinter as tk
     
    def on_xx_arrow(event):
        print('event.keysym', event.keysym)
        dx = dy = 0
        if event.keysym == 'Up': dy = -10
        elif event.keysym == 'Down': dy = 10
        elif event.keysym == 'Left': dx = -10
        elif event.keysym == 'Right': dx = 10
        event.widget.move('snake', dx, dy)
     
    root = tk.Tk()
    canvas = tk.Canvas(height=500, width=500)
    canvas.pack()
    for s in ('<Up>', '<Down>', '<Left>', '<Right>'):
        canvas.bind(s, on_xx_arrow)
    canvas.focus_set()
    canvas.create_rectangle(250, 250, 260, 260, tag='snake')
    tk.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre à l'essai
    Homme Profil pro
    collégien
    Inscrit en
    Juillet 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : collégien
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    excusez moi:
    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
     
    from tkinter import *
    class snake :
    	def __init__(self):
    		self.fen=Tk()
    		self.can=Canvas(self.fen, height=500, width=500)
    		self.can.pack()
    		self.snakelenth = []
    		self.snakelenth.append(self.can.create_rectangle(250, 250, 260, 260))
    		self.fen.bind('<Up>', self.my_up)
    		self.fen.bind('<Down>', self.my_down)
    		self.fen.bind('<Left>', self.my_left)
    		self.fen.bind('<Right>', self.my_right)
    		self.move(0, 0)
    		self.fen.mainloop()
    	def move(self, x, y):
    		copy = self.can.coords(self.snakelenth[0])
    		self.can.coords(self.snakelenth[0], copy[0]+x, copy[1]+y, copy[2]+x, copy[3]+y)
    	def my_up(self, event):
    		self.move(0, -10)
    	def my_down(self, event):
    		self.move(0, 10)
    	def my_left(self, event):
    		self.move(-10, 0)
    	def my_right(self, event):
    		self.move(10, 0)
    a = snake()
    ça peut preter à confusion...

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

    Le dernier code posté fonctionne.
    Si c'est le cas, vous pouvez marquer la discussion
    Sinon indiquez ce que vous voudriez obtenir...

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

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

Discussions similaires

  1. [Débutant] Serialization XML de ma classe qui ne fonctionne pas.
    Par BasicZX81 dans le forum VB.NET
    Réponses: 5
    Dernier message: 10/02/2014, 20h02
  2. [CSS]Classe qui ne s'applique pas
    Par narnou dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 17/03/2006, 14h11
  3. class qui ne s'applique pas sous opéra pour les <tr>?
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/03/2006, 16h55

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