PyQt5中QGraphicsScene获取mousePressEvent事件鼠标位置全都为0.0

问题描述

PyQt5中,想在QGraphicsScene的mousePressEvent中获取鼠标位置,无论点哪,显示的都是[0.0,0.0]

问题出现的环境背景及自己尝试过哪些方法

网上没找到类似的问题

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

#这是继承QGraphicsScene的自定义类
class CARscene(QtWidgets.QGraphicsScene):
    def __init__(self, parent=None):
        super(CARscene, self).__init__(parent)

    def mousePressEvent(self, QMouseEvent):
        #这行代码是期望显示坐标,奈何永远都是[0.0, 0.0]
        print([QMouseEvent.pos().x(), QMouseEvent.pos().y()])

#这是主窗口的类,继承自QtDesigner设计的界面    
class CDataMingQtUi(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
    super(CDataMingQtUi, self).__init__()
    self.setupUi(self)

    #CARgraphview 是一个QGraphicView的实例
    self.figure = plt.figure()
    self.canvas = FigureCanvas(self.figure)
    self.graph_sence = CARscene()
    self.graph_sence.addWidget(self.canvas)
    self.CARgraphview.setScene(self.graph_sence)
    

你期待的结果是什么?实际看到的错误信息又是什么?

期待显示鼠标单击的坐标
实际显示的确是[0.0, 0.0],无论点哪都是这个值

阅读 10k
2 个回答

改成用scenePos

def mousePressEvent(self, event):
    QGraphicsScene.mousePressEvent(self, event)
    e = event.scenePos()
    print(e)
新手上路,请多包涵

一,引入QCursor
from PyQt5.Qt import QCursor

二.绑定本类的eventFilter
self.pb_heading.installEventFilter(self)

三,在qevent.pos()处弹窗,即鼠标所在位置
def eventFilter(self, qobject, qevent):

    qtype = qevent.type()
    # ~ print(qtype)
    # ~ if qtype == QEvent.HoverMove:
    if qtype == QEvent.HoverLeave:
        print("HoverLeave")
        return True
    elif qtype == QEvent.HoverEnter:
        print("HoverEnter")
        print(qevent.pos())
        self.on_pb_heading_clicked(qevent.pos())
        return True
    else:
        return False
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题