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 :

Question héritage entre Class Tk


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    CP
    Inscrit en
    Septembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : CP

    Informations forums :
    Inscription : Septembre 2016
    Messages : 12
    Par défaut Question héritage entre Class Tk
    Bonjour à tous,

    J'essaie de comprendre les class et l'héritage et je bloque.
    Dans le bout de code qui suit, il y a la version commentée avec "super()." qui fonctionne.
    Mais je ne comprends pas pourquoi la version ou j'essaie de "maitriser" l'héritage ne fonctionne pas.
    Donc, il y a un truc qui m'échappe.
    Si quelqu'un peut prendre quelques minutes pour m'expliquer.

    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
    import tkinter as tk
     
    class Application(tk.Tk):
        def __init__(self):
            # super().__init__()
            tk.Tk.__init__(self)
     
            self.title("Principale")
            self.geometry("300x300")
     
            tk.Button(self, text ='Fenêtre 2', command=self.open_window).grid(row=0, column=0)
     
        def open_window(self):
            window = Win2(self)
            window.grab_set()
     
    class Win2(tk.Toplevel):
        # def __init__(self, parent):
            # super().__init__(parent)
        def __init__(self):
            Application.__init__(self)
            self.title("Fenêtre 2")
            self.geometry("800x300")

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par vfriste Voir le message
    Mais je ne comprends pas pourquoi la version ou j'essaie de "maitriser" l'héritage ne fonctionne pas.
    Côté class et héritage, vous avez comment faire avec "python" et des bases de la POO à travailler qui n'ont rien à voir avec le langage.

    Après si vous n'êtes pas plus clair sur ce que vous entendez par "l'héritage ne fonctionne pas", ce n'est pas en lisant le code qu'on va comprendre ce que vous attendez (sinon vous expliquer des rudiments de POO que vous êtes supposé avoir déjà acquis).

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

  3. #3
    Membre averti
    Homme Profil pro
    CP
    Inscrit en
    Septembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : CP

    Informations forums :
    Inscription : Septembre 2016
    Messages : 12
    Par défaut
    Merci pour ce retour.
    Effectivement mon message manque de précision sur le problème que je rencontre.
    Lorsque je clique sur le bouton pour afficher la seconde fenêtre "Toplevel", j'ai le message d'erreur suivant.

    __init__() takes 1 positional argument but 2 were given

    Et donc je suis un peu perdu avec les (self) et le comportement de super() qui lui fonctionne.

    Voilà, j'espère avoir été plus clair.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Ligne 14, Win2(self) appelle l'__init__ avec l'instance courante de Win2 (le self premier argument passé à la méthode) et le self (instance d'Application) passé en paramètre.... d''où le message d'erreur.

    Ligne 21, il y a une autre boulette que je vous laisse découvrir.

    Normalement, en ayant passé un peu de temps dans les tutos vous ne devriez pas être aussi perdu...

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

  5. #5
    Membre averti
    Homme Profil pro
    CP
    Inscrit en
    Septembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : CP

    Informations forums :
    Inscription : Septembre 2016
    Messages : 12
    Par défaut
    Merci

    J'ai compris les 2 erreurs et ça fonctionne !!!
    Bon je vais continuer à lire les tuto sur la POO.
    Mais cet exemple et votre aide m'a permis d'avancer dans ma compréhension.

    Voici le code (si vous avez des remarques, je suis preneur)

    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
    import tkinter as tk
     
    class Application(tk.Tk):
        def __init__(self):
            # super().__init__()
            tk.Tk.__init__(self)
     
            self.title("Principale")
            self.geometry("300x300")
     
            tk.Button(self, text ='Fenêtre 2', command=self.open_window).grid(row=0, column=0)
     
        def open_window(self):
            window = Win2()
            window.grab_set()
     
    class Win2(tk.Toplevel):
        # def __init__(self, parent):
            # super().__init__(parent)
        def __init__(self):
            tk.Toplevel.__init__(self)
            self.title("Fenêtre 2")
            self.geometry("800x300")

Discussions similaires

  1. [CSS 3] Héritage entre classes
    Par PhoenixFnX dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 21/08/2011, 01h44
  2. pb héritage entre class
    Par topher dans le forum GTK+ avec Python
    Réponses: 0
    Dernier message: 10/02/2011, 20h06
  3. Lien héritage entre classe Page et classe UserControl
    Par stefsas dans le forum ASP.NET
    Réponses: 5
    Dernier message: 15/07/2010, 13h58
  4. Réponses: 0
    Dernier message: 06/05/2010, 18h34
  5. [POO] Héritage entre deux classes
    Par Lenaick dans le forum Langage
    Réponses: 5
    Dernier message: 16/10/2007, 09h53

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