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 :

Héritages de classes


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 34
    Points
    34
    Par défaut Héritages de classes
    Bonjour,


    J'ai inséré dans mon code une classe définissant des objets labels. Quand j'applique ma méthode nomdelabel=Labelobject(), pas de problème, ça fonctionne.
    Mais le problème arrive quand après je veux appliquer nomdelabel.destroy() dès que j'en ai plus besoin. Évidemment, il me répond qu'il ne connait pas .destroy(). Logique, ce n'est pas définit dans ma classe. De ce fait, j'aurais aimé que ma classe puisse hériter de Tkinter, donc j'ai ajouté la 1ère ligne suivante à mon programme :

    -import Tkinter as Tk.

    Ensuite, j'ai placé Tk entre parenthèse dans ma classe Labelobject pour qu'il hérite des propriétés de l'objet Tkinter, j'obtiens maintenant le message d'erreur suivant :

    TypeError: Error when calling the metaclass bases
    module.__init__() takes at most 2 arguments (3 given)

    Le code de ma classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Labelobject(Tk):
     
        def __init__(self,notebook,titre,row,column,padx,pady):
     
            #Instance attributs
     
            self.etiquette=Label(notebook,text=titre)
            self.etiquette.grid(row=row,column=column,padx=padx,pady=pady)
        def ecrire(self,nombre):
            self.nombre = nombre
            self.etiquette.configure (text='File value : ' + str (self.nombre))

    Merci pour votre aide

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    il est nécessaire d'invoquer explicitement le __init__ des classes de base. donc, la méthode __init__ de ta classe doit faire un:

    Je mets ... parce que je suis pas vraiment familier de Tkinter mais tu devrais savoir quoi mettre toi, ce sont les arguments que tu donnes en général à une instance de Tk.

    Seulement, attention. Il me semble que ce que tu veux créer c'est un widget personnalisé et il doit y avoir une meilleure classe de base que Tk (du genre Tk.Widget).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 34
    Points
    34
    Par défaut Rajouter une def
    En fait j'ai trouvé sans invoquer Tkinter. J'ai créé une def 'supprimer' dans ma classe de label dans laquelle j'ai rajouté un self.method.destroy(). Quand j'appelle ensuite la fonction objetlabel.destroy(), ça marche. Un exemple simplifié de code qui solutionne le problème pour ceux qui rencontreraient le même problème que 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
    from Tkinter import *
     
    class test():
     
        def __init__(self,texte):
     
            self.method=Label(text=texte)
            self.method.pack()
     
        def supprimer(self):
     
            self.method.destroy()
     
    fen1=Tk()
     
    labeltest=test('Salut')
    labeltest.supprimer()
     
    fen1.mainloop()

    Mais je garde ta soluce, elle peut me servir plus tard. Merci

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    si je peux me permettre, appelle la méthode "supprimer": "destroy".

    ça t'évitera plus tard de rechercher son nom si c'est le nom habituellement utilisé par Tkinter.

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

Discussions similaires

  1. conflit d'inclusions et Héritage de classe
    Par gedeon555 dans le forum C++
    Réponses: 7
    Dernier message: 01/10/2006, 19h48
  2. [POO] Problème héritage des classes PHP4
    Par zana74 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2006, 16h00
  3. Héritage de classes.
    Par Berzerk_ dans le forum C++
    Réponses: 48
    Dernier message: 13/08/2006, 23h48
  4. [POO] Héritage vs classe dans une classe
    Par robichou dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2006, 23h51
  5. [OO] Héritage - Mixins Classes
    Par djmalo dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 01/03/2005, 23h16

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