2016-12-04 323 views
0

嗨,我是Qt和Pyside的新手。我试图在QGraphicsView实例中获取鼠标的坐标。我试图重新实现我的mouseReleaseEvent,但想知道如何实际使用这个重新实现的函数。如何在QGraphicsView中获取鼠标释放坐标

在MainWindow类:

self.tScn = QtGui.QGraphicsScene() 
self.graphicsView_2 = QtGui.QGraphicsView(self.centralwidget, self.tScn) 

在MainConsumer类(从主窗口导出:

def pointSelection(self): 
    pos = self.tScn.mouseReleaseEvent(QMouseEvent) 
    print(pos) 

def mouseReleaseEvent(self, QMouseEvent): 
    pos = QMouseEvent.lastScenePos() 
    print(pos) 
    return pos 

蟒蛇给了我这样的警告:

AttributeError: 'PySide.QtGui.QMouseEvent' object has no attribute 'lastScenePos

我尝试的情侣不同的命令和结构,但没有任何工作现在我真的很困惑PySide.QtGui.QGraphicsScene.mouseReleaseEvent(event),PySide.QtGui.QGraphicsSceneMouseEvent.lastScenePos(),class PySide.QtGui.QGraphicsSceneMouseEvent([type=None])QtCore.QEvent.GraphicsSceneMouseRelease之间的关系有人能帮助我吗?

谢谢!

回答

1

创建从QGraphicsScene继承和具有这样

class MyGraphicsScene(QtGui.QGraphicsScene): 
    signalMousePos = QtCore.pyqtSignal(QtCore.QPointF) 
    def __init__(self, parent): 
     super(MyGraphicsScene, self).__init__(parent) 

信号的类,然后在这个新类

def mouseReleaseEvent(QGraphicsSceneMouseEvent): 
    pos = QGrapihcsSceneMouseEvent.lastScenePos() 
    self.signalMousePos.emit(pos) 

覆盖mouseRelease事件然后在您的MainConsumer类取代

self.tScn = QtGui.QGraphicsScene() 

self.tScn = MyQGraphicsScene() 
self.tScn.signalMousePos.connect(self.pointSelection) 

的pointSelection变得

def pointSelection(self, pos) 
    #Whatever you want to do with the position coordinates 

和mouseReleaseEvent在MainConsumer不再需要

+0

太感谢你了!大约在11分钟前,我自己想通了,回来回答我自己的问题,但你的解释更有组织和明确,所以再次感谢! –