親クラスのマウスイベントを実行

2016/09/02

Python2.7.10, PyQt4.11.3

通常は子クラスにマウスイベントが設定されている場合は、親クラスのマウスイベントは実行しないようになってるみたい。 でも、子クラスのメソッド内で、下を呼び出せば親クラスのマウスイベントも発火する。

event.ignore()


下のサンプルでは、event.ignore()がない場合はQGraphicsViewのmousePressEventしか実行されないけど、event.ignore()がある場合は、QMainWindow()nomousePressEventも実行される。

from PyQt4 import QtGui, QtCore

class View(QtGui.QGraphicsView):
    def mousePressEvent(self, event):
        print "QGraphicsView mousePress"
        event.ignore()

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.s = QtGui.QGraphicsScene(self)
        self.v = View(self.s)
        self.setCentralWidget(self.v)

    def mousePressEvent(self, event):
        print "QMainWindow mousePress"

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.resize(300, 200)
    window.show()
    sys.exit(app.exec_())


Pyside QgraphicsScene can't capture mouse events
http://stackoverflow.com/questions/14701631/pyside-qgraphicsscene-cant-capture-mouse-events