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 :

Problème d'initialisation d'objet [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par défaut Problème d'initialisation d'objet
    Bonjour,

    Je débute avec Python... J'ai recopié un bout de code dans un livre et je parvient pas à instancier correctement mon objet "balle".

    Je vous livre tout le code qui n'est pas bien long.
    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
    from tkinter import *
    import random
    import time
     
    class Balle:
     
        def _init_(self, canvas, couleur):
            self.canvas = canvas
            self.id = Canvas.create_oval(10, 10, 25, 25, fill=couleur)
            self.canvas.move(self.id, 245, 100)
     
        def dessiner(self):
            self.canvas.move(self.id, 0, -1)
     
    #15
     
    tk = Tk()
    tk.title("Jeu")
    tk.resizable(0,0)
    tk.wm_attributes("-topmost",1)
    canvas = Canvas(tk, bg='ivory', width=500, heigh=400, bd=0, highlightthickness=0)
    canvas.pack()
    tk.update()
     
    balle = Balle(canvas, 'red')
     
     
    while 1:
        balle.dessiner()
        tk.update_idletasks()
        tk.update()
        time.sleep(0.01)
    Et le message d'erreur :
    >>>
    Traceback (most recent call last):
    File "D:/PROGRAMMES/Langages/Python34/tkinter03.py", line 25, in <module>
    balle = Balle(canvas, 'red')
    TypeError: object() takes no parameters
    >>>
    Je sèche complètement

    Quelqu'un peut-il me dépanner ?

    Merci d'avance.

  2. #2
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par JOHN14 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Balle:
     
        def _init_(self, canvas, couleur):
            self.canvas = canvas
            self.id = Canvas.create_oval(10, 10, 25, 25, fill=couleur)
            self.canvas.move(self.id, 245, 100)
    Bonjour,
    La première fonction est "__init__" et pas "_init_" (deux soulignés avant et deux après).
    Clodion

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonjour,

    Il y a une seconde erreur à corriger pour que ça fonctionne.

    Dans la fonction __init__ le create_oval doit être fait sur l'instance du canvas créé.

    ici ce sera soit self.canvas soit canvas sans majuscule.

    C'est dangereux d'utiliser ce type d'import (*) car on ne maîtrise pas quels éléments seront remplacés dans globals().
    Mais on peut très bien importer certains éléments/fonctions on sait ainsi à quelle lib appartient l'élément importé.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from tkinter import Canvas
    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
    import tkinter
    import random
    import time
     
    class Balle:
     
        def __init__(self, canvas, couleur):
            self.canvas = canvas
            self.id = self.canvas.create_oval(10, 10, 25, 25, fill=couleur)
            self.canvas.move(self.id, 245, 100)
     
        def dessiner(self):
            self.canvas.move(self.id, 0, -1)
     
    #15
     
    tk = tkinter.Tk()
    tk.title("Jeu")
    tk.resizable(0,0)
    tk.wm_attributes("-topmost",1)
    canvas = tkinter.Canvas(tk, bg='ivory', width=500, heigh=400, bd=0, highlightthickness=0)
    canvas.pack()
    tk.update()
     
    balle = Balle(canvas, 'red')
     
     
    while 1:
        balle.dessiner()
        tk.update_idletasks()
        tk.update()
        time.sleep(0.01)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par défaut
    Bonjour

    Le problème de l'instanciation de l'objet est résolu.
    Merci pour cette remarque. Maintenant, je ferai plus attention aux "__".

    MAIS, j'ai une nouvelle erreur que je n'arrive pas à corriger :
    >>>
    Traceback (most recent call last):
    File "D:\PROGRAMMES\Langages\Python34\codes\tkinter03.py", line 25, in <module>
    balle = Balle(canvas, 'red')
    File "D:\PROGRAMMES\Langages\Python34\codes\tkinter03.py", line 9, in __init__
    self.id = Canvas.create_oval(10, 10, 25, 25, fill=couleur)
    File "D:\PROGRAMMES\Langages\Python34\lib\tkinter\__init__.py", line 2333, in create_oval
    return self._create('oval', args, kw)
    AttributeError: 'int' object has no attribute '_create'
    >>>
    Elle concerne la méthode "create_oval" de tkinter.

    J'apprécierais un autre p'tit coup de pousse.
    Merci.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par défaut
    Merci YCL-1,

    Je n'avais pas vu votre réponse.

    Je viens de corriger "self.id = Canvas.create_ovalsans" en "self.id = canvas.create_oval", c'est-à-dire en minuscule.

    Le problème est complètement résolu.

    Un grand merci à vous deux.

    Cordialement.

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

Discussions similaires

  1. [hibernate]Problème de récupération d'objet...
    Par roxx62 dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/07/2005, 11h36
  2. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  3. Réponses: 14
    Dernier message: 02/03/2005, 18h15
  4. Pitié, aidez moi : Problème d'initialisation de postgreSQL
    Par ttalourd dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 16/11/2004, 12h10
  5. [servlet] initialisation d'objets
    Par tiPouick dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 05/08/2003, 12h12

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