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 :

widget depuis différentes classes


Sujet :

PyQt Python

  1. #1
    Invité
    Invité(e)
    Par défaut widget depuis différentes classes
    Bonjour,
    je commence à peine à sous-classer des widgets pour pouvoir mieux gérer leurs propriétés.

    j'ai un code qui est grossièrement structuré comme ci dessous.
    il semble tourner correctement sauf qu'il ne fonctionne pas tout à fait comme je le voudrais...

    c'est dans la class MainWindow que j'ai déclaré tous les widgets (dans le init ou dans une fonction pour un groupbox)
    c'est dans la class MyGraphicsScene que je gère les évènements, le traçage de forme à la souris etc... grâce aux pressevent et keyevent

    j'aimerais faire interagir mes widget de mainwindow pour déclencher les appels de fonction de ma class MyGraphicsScene.
    Seulement je n'arrive pas à avoir accès à l'état de mes widget (ni à aucune variable contenu dans mes fonctions de mainwindow) depuis la class MyGraphicsScene et réciproquement.

    Avez vous un conseil?
    merci

    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
    class MainWindow(QMainWindow):
     
        def __init__(self):
            QMainWindow.__init__(self)      
     
    class MyGraphicsScene(QGraphicsScene)
        def __init__(self):
            QGraphicsScene.__init__(self)
     
        def mousePressEvent(self, a):     
     
        def mouseReleaseEvent(self, a):
     
        def mouseMoveEvent(self, a):
     
        def keyPressEvent(self, a):
     
        def keyReleaseEvent(self, a):

  2. #2
    Expert confirmé

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

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

    Tu dois passer l'instance de ta fenêtre à la scène pour qu'elle puisse communiquer avec elle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class MainWindow(QMainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
            self.scene =  MyGraphicsScene(self)
     
    class MyGraphicsScene(QGraphicsScene)
        def __init__(self, ui):
            QGraphicsScene.__init__(self)
            self.ui = ui
     
        def mousePressEvent(self, a):
            self.ui.fais_ceci_cela()

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    merci pour la réponse, je viens d'essayer et ça marche!
    Apparemment, j’essayais de faire fonctionner les choses à l'envers (en partant du mainwindow) mais apparemment c'est mieux en faisant appel au mainwindow depuis MyGraphicsScene.

    Bon je pense que je vais m'en sortir pour faire ce que je veux mais il y a deux trucs que j'ai du mal à comprendre:

    1- à mes yeux la class MyGraphicsScene est "en dessous" de la class mainwindow pourtant elle ne semble pas hériter de mainwindow mais de QGraphicScene.
    est-ce que mes deux class ont un heritage commun?

    2- c'est quoi ce ui??? dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def __init__(self, ui):
    merci!

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Les deux classes n'ont aucun besoin d'avoir un ancêtre commun.

    Bien que ce soit généralement le cas, les widgets héritent pratiquement tous de QObject par exemple.

    Mais il faut toujours se limiter aux héritages qui se justifient et ce que tu as fait est très bien comme ça.

    La scène n'est pas sous la mainWindows, elle est simplement créée à ce niveau là, en général les widgets ou groupes de widgets sont instanciés dans la mainWindow.

    Le ui (user interface) est justement l'instance de la mainWindow ce qui permet à la scène de pouvoir y référer.

  5. #5
    Invité
    Invité(e)
    Par défaut
    ok super merci
    il me reste à m'habituer et à comprendre pleinement le vocabulaire lié aux objets, attributs, instances, heritage etc...

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

Discussions similaires

  1. Agir sur un widget depuis une autre classe
    Par Cenixosh dans le forum Débuter
    Réponses: 2
    Dernier message: 09/03/2017, 22h16
  2. Réponses: 4
    Dernier message: 08/03/2006, 19h07
  3. acces a uneressource bitmap depuis une classe
    Par firejocker dans le forum MFC
    Réponses: 9
    Dernier message: 03/02/2006, 21h48
  4. Réponses: 14
    Dernier message: 15/12/2005, 18h46
  5. Référence à un objet existant depuis une classe
    Par Adrenalys dans le forum ASP
    Réponses: 2
    Dernier message: 21/07/2005, 00h44

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