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 :

Communiquer d'un QGraphicView vers des classes d'une application


Sujet :

PyQt Python

  1. #1
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut Communiquer d'un QGraphicView vers des classes d'une application
    Mon problème est le suivant : j'ai enfin compris comment récupérer les évènements liés à la souris sur deux GraphicsView différents, mais je n'arrive pas à faire appeler la méthode chgt() qui elle est définie dans la QMainWindow. Quelqu'un sait-il comment faire ?

    Par avance 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    # -*- coding: utf-8 -*-
    from PyQt4 import QtCore, QtGui
     
    class GraphicsView_1(QtGui.QGraphicsView):
        def __init__(self, parent=None):
            super(GraphicsView_1, self).__init__(parent)
     
        def mouseMoveEvent(self, mouseEvent):
            pt = mouseEvent.pos()
    ###################################
    ###################################
    #	C'est ici que je voudrais appeler la fonction chgt.
    ###################################
    ###################################
     
    class GraphicsView_2(QtGui.QGraphicsView):
        def __init__(self, parent=None):
            super(GraphicsView_2, self).__init__(parent)
     
        def wheelEvent(self, event):
            print 'Au dessus du graphique 2 : Roulette de la souris activé'
     
        def mousePressEvent(self, mouseEvent):
            if mouseEvent.button() == QtCore.Qt.LeftButton :
                pt = mouseEvent.pos()
                print 'Sur le graphique 2 : Clic Gauche avec la souris - Position relative (x;y) = (' + str(pt.x()) + ';' + str(pt.y()) + ')'
            elif mouseEvent.button() == QtCore.Qt.RightButton :
                print 'Sur le graphique 2 : Clic Droit avec la souris - Position globale (x;y) = (' + str(mouseEvent.globalX()) + ';' + str(mouseEvent.globalY()) + ')'
     
    class Ui_window_TestSouris_Plus(object):
        def setupUi(self, window_TestSouris_Plus):
            window_TestSouris_Plus.setObjectName("window_TestSouris_Plus")
            window_TestSouris_Plus.resize(697,538)
            window_TestSouris_Plus.setMinimumSize(QtCore.QSize(697,538))
            window_TestSouris_Plus.setMaximumSize(QtCore.QSize(697,538))
            self.centralwidget = QtGui.QWidget(window_TestSouris_Plus)
            self.centralwidget.setGeometry(QtCore.QRect(0,21,697,498))
            self.centralwidget.setObjectName("centralwidget")
            self.horizontalLayout = QtGui.QHBoxLayout(self.centralwidget)
            self.horizontalLayout.setObjectName("horizontalLayout")
            self.graphicsView_1 = GraphicsView_1()
            self.graphicsView_1.setObjectName("graphicsView_1")
            self.horizontalLayout.addWidget(self.graphicsView_1)
            spacerItem = QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem)
            self.graphicsView_2 = GraphicsView_2()
            self.graphicsView_2.setObjectName("graphicsView_2")
            self.horizontalLayout.addWidget(self.graphicsView_2)
            window_TestSouris_Plus.setCentralWidget(self.centralwidget)
            self.menubar = QtGui.QMenuBar(window_TestSouris_Plus)
            self.menubar.setGeometry(QtCore.QRect(0,0,697,21))
            self.menubar.setObjectName("menubar")
            window_TestSouris_Plus.setMenuBar(self.menubar)
            self.statusbar = QtGui.QStatusBar(window_TestSouris_Plus)
            self.statusbar.setGeometry(QtCore.QRect(0,519,697,19))
            self.statusbar.setObjectName("statusbar")
            window_TestSouris_Plus.setStatusBar(self.statusbar)
     
            self.retranslateUi(window_TestSouris_Plus)
            QtCore.QMetaObject.connectSlotsByName(window_TestSouris_Plus)
     
        def retranslateUi(self, window_TestSouris_Plus):
            window_TestSouris_Plus.setWindowTitle(QtGui.QApplication.translate("window_TestSouris_Plus", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
     
        def chgt(self):
            print 'ok ok ok ok'
     
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        window_TestSouris_Plus = QtGui.QMainWindow()
        ui = Ui_window_TestSouris_Plus()
        ui.setupUi(window_TestSouris_Plus)
        window_TestSouris_Plus.show()
        sys.exit(app.exec_())

  2. #2
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut Dans la série QUESTION-REPONSE, voilà comment faire...
    Voici les modifications à faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        def __init__(self, parent=None):
            super(GraphicsView_1, self).__init__(parent)
    doit devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        def __init__(self, foncRetour, parent=None):
            super(GraphicsView_1, self).__init__(parent)
            self.foncRetour = foncRetour
    On peut alors appeler la fonction de retour self.foncRetour dans le GraphicsView.

    J'ai mis ci-dessous le code complet modifié.

    PS : si quelqu'un passe sur ce forum, qu'il me fasse signe car je me sens un peu seul...



    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    # -*- coding: utf-8 -*-
     
    # Form implementation generated from reading ui file 'C:\Documents and Settings\Christophe\Mes documents\2,pyBaNaMa\DebuterAvecPythonEtPyQT\CodesProjets\05-Proj5_DessinGraphSouris\01-TestSouris\window_TestSouris_Plus.ui     '
    #
    # Created: Thu Aug 14 13:49:25 2008
    #      by: PyQt4 UI code generator 4.4.2
    #
    # WARNING! All changes made in this file will be lost!
     
    from PyQt4 import QtCore, QtGui
     
    class GraphicsView_1(QtGui.QGraphicsView):
        def __init__(self, foncRetour, parent=None):
            super(GraphicsView_1, self).__init__(parent)
            self.foncRetour = foncRetour
     
        def wheelEvent(self, event):
            print 'Au dessus du graphique 1 : Roulette de la souris activée'
     
        def mouseMoveEvent(self, mouseEvent):
            pt = mouseEvent.pos()
            self.foncRetour(1,pt.x(),pt.y())
     
        def mousePressEvent(self, mouseEvent):
            if mouseEvent.button() == QtCore.Qt.LeftButton :
                pt = mouseEvent.pos()
                print 'Sur le graphique 1 : Clic Gauche avec la souris \nPosition relative (x;y) = (' + str(pt.x()) + ';' + str(pt.y()) + ')'
            elif mouseEvent.button() == QtCore.Qt.RightButton :
                print 'Sur le graphique 1 : Clic Droit avec la souris \nPosition globale (x;y) = (' + str(mouseEvent.globalX()) + ';' + str(mouseEvent.globalY()) + ')'
     
     
    class GraphicsView_2(QtGui.QGraphicsView):
        def __init__(self, foncRetour, parent=None):
            super(GraphicsView_2, self).__init__(parent)
            self.foncRetour = foncRetour
     
        def wheelEvent(self, event):
            print 'Au dessus du graphique 2 : Roulette de la souris activé'
     
        def mouseMoveEvent(self, mouseEvent):
            pt = mouseEvent.pos()
            self.foncRetour(2,pt.x(),pt.y())
     
        def mousePressEvent(self, mouseEvent):
            if mouseEvent.button() == QtCore.Qt.LeftButton :
                pt = mouseEvent.pos()
                print 'Sur le graphique 2 : Clic Gauche avec la souris \nPosition relative (x;y) = (' + str(pt.x()) + ';' + str(pt.y()) + ')'
            elif mouseEvent.button() == QtCore.Qt.RightButton :
                print 'Sur le graphique 2 : Clic Droit avec la souris \nPosition globale (x;y) = (' + str(mouseEvent.globalX()) + ';' + str(mouseEvent.globalY()) + ')'
     
    class Ui_window_TestSouris_Plus(object):
        def setupUi(self, window_TestSouris_Plus):
            window_TestSouris_Plus.setObjectName("window_TestSouris_Plus")
            window_TestSouris_Plus.resize(697,538)
            window_TestSouris_Plus.setMinimumSize(QtCore.QSize(697,538))
            window_TestSouris_Plus.setMaximumSize(QtCore.QSize(697,538))
            self.centralwidget = QtGui.QWidget(window_TestSouris_Plus)
            self.centralwidget.setGeometry(QtCore.QRect(0,21,697,498))
            self.centralwidget.setObjectName("centralwidget")
            self.horizontalLayout = QtGui.QHBoxLayout(self.centralwidget)
            self.horizontalLayout.setObjectName("horizontalLayout")
            self.graphicsView_1 = GraphicsView_1(self.modifGraph)
            self.graphicsView_1.setObjectName("graphicsView_1")
            self.horizontalLayout.addWidget(self.graphicsView_1)
            spacerItem = QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem)
            self.graphicsView_2 = GraphicsView_2(self.modifGraph)
            self.graphicsView_2.setObjectName("graphicsView_2")
            self.horizontalLayout.addWidget(self.graphicsView_2)
            window_TestSouris_Plus.setCentralWidget(self.centralwidget)
            self.menubar = QtGui.QMenuBar(window_TestSouris_Plus)
            self.menubar.setGeometry(QtCore.QRect(0,0,697,21))
            self.menubar.setObjectName("menubar")
            window_TestSouris_Plus.setMenuBar(self.menubar)
            self.statusbar = QtGui.QStatusBar(window_TestSouris_Plus)
            self.statusbar.setGeometry(QtCore.QRect(0,519,697,19))
            self.statusbar.setObjectName("statusbar")
            window_TestSouris_Plus.setStatusBar(self.statusbar)
     
            self.retranslateUi(window_TestSouris_Plus)
            QtCore.QMetaObject.connectSlotsByName(window_TestSouris_Plus)
     
        def retranslateUi(self, window_TestSouris_Plus):
            window_TestSouris_Plus.setWindowTitle(QtGui.QApplication.translate("window_TestSouris_Plus", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
     
        def modifGraph(self,num_Graph,x_souris,y_souris):
            self.statusbar.showMessage(u"Graphique n°" + str(num_Graph) + u" survolé : Souris aux coordonnées (" + str(x_souris) + ";" + str(y_souris) + ")", 1000)
     
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        window_TestSouris_Plus = QtGui.QMainWindow()
        ui = Ui_window_TestSouris_Plus()
        ui.setupUi(window_TestSouris_Plus)
        window_TestSouris_Plus.show()
        sys.exit(app.exec_())

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/04/2013, 10h18
  2. Liste des classes d'une application
    Par imi dans le forum Langage
    Réponses: 0
    Dernier message: 23/01/2009, 16h29
  3. Réponses: 5
    Dernier message: 26/07/2006, 17h01
  4. Réponses: 12
    Dernier message: 30/06/2006, 16h46
  5. |VB6] Comment Lister les liens vers des fichiers d'une page web
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/01/2005, 18h17

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