pyqt4鼠标释放事件无法正常工作

时间:2018-06-16 12:35:27

标签: python pyqt pyqt4

我试图跟踪鼠标按压和鼠标释放事件,但鼠标释放事件无法识别。

import sys, os

from PyQt4.QtCore import *
from PyQt4.QtGui import *



class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.btn = QPushButton("Add Line")

        self.gv = QGraphicsView()
        self.scene = QGraphicsScene(self)
        self.gv.setScene(self.scene)
        self.gv.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)

        lay = QHBoxLayout(self)
        lay.addWidget(self.btn)
        lay.addWidget(self.gv)
        script_dir = sys.path[0]

        image_loc = os.path.dirname(script_dir) + '/testproject/configs/files/lena.png'
        print image_loc
        #self.p_item = self.scene.addPixmap(QPixmap("lena.png"))
        self.p_item = self.scene.addPixmap(QPixmap(image_loc))

        self.btn.clicked.connect(self.add_line)

    def add_line(self, event):
        import pprint
        print pprint.pprint(dir(event))
        pass

    def mousePressEvent(self, QMouseEvent):
        print 'mouse press event = ', QMouseEvent.pos()

    def mouseReleaseEvent(self, QMouseEvent):
        print 'mouse release event = ', QMouseEvent.pos()
        # cursor = QCursor()
        # print 'mouse release event = ', cursor.pos()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:2)

在Qt中,事件从父母传递给孩子,但反之亦然。在您的情况下,事件mousePressEvent在窗口小部件中启动,然后您可以移至QPushButtonQGraphicsView,让我们假设它属于{{1}然后它会发生在名为QGraphicsView的子窗口小部件中,这将在某个窗口小部件接受该事件之前完成,viewport()必须发生同样的事情,但对于要接收mouseReleaseEvent的对象必须这样做已接受mouseReleaseEvent事件,唯一已完成此事件的是mousePressEvent viewport()。解决方案是将事件过滤器安装到QGraphicsView的{​​{1}},如下所示。

viewport()