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

PyQt Python Discussion :

[PyQt] Héritage multiple [QtGui]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Par défaut [PyQt] Héritage multiple
    Bonjour,

    Je souhaite créer une classe générique dérivée de QWidget contenant les méthodes communes à toutes mes fenêtres ainsi que plusieurs classes contenant les méthodes propres à chaque type de fenêtre (QMainWindow, QDialog, QFrame ...).
    Visibilement l'héritage multiple pose des problèmes.
    Auriez-vous une idée de comment je pourrais modéliser ça ?
    En l'état, celà ne fonctionne pas.

    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
    class GenericWindow(QtGui.QWidget):
        """
        Fenêtre générique.
        """
        def __init__(self, app_obj, parent_widget, window_name, window_flags=None):
            if not window_flags is None:
                QtGui.QWidget.__init__(self, parent_widget, window_flags)
            else:
                QtGui.QWidget.__init__(self, parent_widget)
    ...
     
    class VideoPlayer(QtGui.QFrame, GenericWindow):
        """
        Frame contenant un lecteur vidéo.
        """
        def __init__(self, app_obj, parent_widget, widget_name):
            QtGui.QFrame.__init__(self, parent_widget)
            GenericWindow.__init__(self, app_obj, parent_widget, widget_name)
    ...
     
    class MainWindow(QtGui.QMainWindow, GenericWindow):
        """
        Fenêtre personnalisée.
        """
        def __init__(self, app_obj, parent_widget, window_name, window_flags=0):
            QtGui.QMainWindow.__init__(self, parent_widget, window_flags)
            GenericWindow.__init__(self, app_obj, parent_widget, window_name)
    ...
     
    class Dialog(QtGui.QDialog, GenericWindow):
        """
        Fenêtre personnalisée.
        """
        def __init__(self, app_obj, parent_widget, window_name, window_flags=0):
            QtGui.QDialog.__init__(self, parent_widget, window_flags)
            GenericWindow.__init__(self, app_obj, parent_widget, window_name)
    ...

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Oui, la doc dit bien qu'il ne faut pas faire d'héritage multiple avec 2 objets "Qt".

    Une suggestion: quand on crée une fenêtre graphique en utilisant QtDesigner, le code qui en est issu est une classe qui hérite de 'object', donc de Python normal: on peut alors faire de l'héritage multiple avec QWidget ou QMainWindow: peut-être y a-t-il là une astuce dont tu pourrais t'inspirer?

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ceci semble faire ce que je crois comprendre de ce que tu attends:
    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
     
    # -*- coding= utf-8 -*-
     
    import sys
     
    from PyQt4 import QtGui, QtCore
     
    class GenericWindow(QtGui.QWidget):
        """
        Fenêtre générique.
        """
        def __init__(self, parent, name, flags=QtCore.Qt.Widget):
            super(GenericWindow, self).__init__(parent, flags)
            self.size = QtCore.QSize(300, 200)
     
        def get_size(self):
            return self.size
     
    class VideoPlayer(QtGui.QFrame, GenericWindow):
        """
        Frame contenant un lecteur vidéo.
        """
        def __init__(self, parent, name):
            super(VideoPlayer, self).__init__(parent, name, flags=QtCore.Qt.Widget)
            self.get_generic_size()
     
        def get_generic_size(self):
            print self.get_size()
     
    if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        vplayer = VideoPlayer(None, 'Video Player')
    Donc ici VideoPlayer hérite d'une méthode de GenericWindow.

    J'ai enlevé de ton code les éléments dont je n'avais pas connaissance (app_obj, ...) mais ça ne devrait rien changer au principe.



    Edit: Corrigé, le code ne correspondait pas à ce que je disais. (fin de semaine)

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Par défaut
    Merci beaucoup je vais étudier cette piste !
    Bon pour l'instant après modification l'application se ferme sans message d'erreur mais je progresse

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Par défaut
    Bon quelques nouvelles après plusieurs rectificatifs, ça marche impeccable !
    Merci pour la solution !

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

Discussions similaires

  1. composants C++ Builder et héritage multiple
    Par vedrfolnir dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/10/2005, 10h04
  2. [heritage][conception]héritage multiple en java!
    Par soulhouf dans le forum Langage
    Réponses: 9
    Dernier message: 25/08/2005, 20h03
  3. L'héritage multiple est-il possible en Delphi ?
    Par SchpatziBreizh dans le forum Langage
    Réponses: 8
    Dernier message: 30/06/2005, 11h30
  4. utilisez vous l'héritage multiple ?
    Par vodosiossbaas dans le forum C++
    Réponses: 8
    Dernier message: 13/06/2005, 20h25
  5. [XML Schemas]héritage multiple
    Par nicolas_jf dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 12h55

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