PyQt的。如何阻止鼠标右键单击清除选择?

时间:2016-03-16 12:26:26

标签: python pyqt qgraphicsscene

我有一个QGraphicsScene和许多可选项。但是当我单击鼠标右键时 - 取消选择所有对象。我想要显示菜单并编辑所选对象,但在鼠标右键单击时可以自动取消选择...

也许问题在于我已经包含了橡胶选择。最后选择对象是我拉动框架时左右键的方式,因此在按下右键的同时重置...

单击鼠标右键时如何突出显示对象?或者可能需要禁用右键的橡胶选择?

2 个答案:

答案 0 :(得分:2)

Daniele Pantaleone回答给了我一个想法,我修改了mousePressEvent()的功能,并立即得到了预期的效果

def mousePressEvent(self, event):
    if event.button() == Qt.MidButton:
        self.__prevMousePos = event.pos()
    elif event.button() == Qt.RightButton: # <--- add this 
        print('right')
    else:
        super(MyView, self).mousePressEvent(event)

答案 1 :(得分:1)

一种可能的解决方案是使用mouseReleaseEvent来显示上下文菜单,而不是contextMenuEvent

def mouseReleaseEvent(self, mouseEvent):
    if mouseEvent.button() == Qt.RightButton:
        # here you do not call super hence the selection won't be cleared
        menu = QMenu()
        menu.exec_(mouseEvent.screenPos())
    else:
        super().mouseReleaseEvent(mouseEvent)

我还没有能够测试它,但我想它应该可行。关键是默认情况下QGraphicsScene清除了选择,因此在需要显示上下文菜单的情况下,您需要做的是防止在满足某些条件时发生清除。