将ScrollHandDrag表单的左键更改为中键PYQT5

时间:2019-04-11 23:15:33

标签: python python-3.x pyqt pyqt5 qgraphicsview

我很好奇,是否有一种方法可以更改install.packages("alluvial") library(alluvial) ggplot(final_df_2 , aes(x = number, stratum = treatment, alluvium = individual_id, fill = treatment, label = treatment)) + scale_fill_brewer(type = "qual", palette = "Set3") + geom_flow(width = 1/10) + geom_stratum(width = 1/10, colour = NA) + scale_x_continuous(breaks = 1:7, labels = c("1st Therapy", "2nd Therapy", "3rd Therapy", "4th Therapy", "5th Therapy", "6th Therapy", "7th Therapy"))+ ggtitle("Treatment across observation period")+ theme_minimal()+ theme( panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.y = element_blank()) 以使其在用户放大点时使用中心按钮而不是鼠标左键进行平移。还有没有办法对用户可以平移的位置也没有任何限制?谢谢你的帮助。我在下面附加了一些代码。

QGraphicsView.ScrollHandDrag

1 个答案:

答案 0 :(得分:2)

是的,您可以更改平移光标。

请将您的代码部分更改为这些。

def mousePressEvent(self, event):

    if event.button() == Qt.MidButton:
        self.viewport().setCursor(Qt.ClosedHandCursor)  
        self.original_event = event
        handmade_event = QMouseEvent(QEvent.MouseButtonPress,QPointF(event.pos()),Qt.LeftButton,event.buttons(),Qt.KeyboardModifiers())
        self.mousePressEvent(handmade_event)
        #Im Sure I have to do something here.

    super(PhotoViewer, self).mousePressEvent(event)
def mouseReleaseEvent(self, event):
    if event.button() == Qt.MidButton:
        #for changing back to Qt.OpenHandCursor
        self.viewport().setCursor(Qt.OpenHandCursor)
        handmade_event = QMouseEvent(QEvent.MouseButtonRelease,QPointF(event.pos()),Qt.LeftButton,event.buttons(),Qt.KeyboardModifiers())
        self.mouseReleaseEvent(handmade_event)
    super(PhotoViewer, self).mouseReleaseEvent(event)

说明

基本上,要更改QGraphicsView上的鼠标光标图片,

QGraphicsView.vieport().setCursor()

为什么Qt.LeftButton默认情况下可以更改光标?

我认为这是默认设置。Qt的开发者可能会预测当光标形状为OpenHandCursor时,用户可以通过按向左按钮来平移屏幕。

因此,对于LeftButton而言,您可能无法使光标保持“打开”状态,反之亦然。 它嵌入在super(PhotoViewer, self).mousePressEvent(event)中 我们将无法连接内容。 因此,您不希望通过LeftMouse进行更改,而是在此处编写return并编写其他命令。

手工事件对象

如果您按下MidButton,则可以自己创建LeftButton MouseEvent, 并将其传递给mousePressEvent。 mousePressEvent接受它,并像处理leftButton事件一样处理它。

如果仅将手工代码放在mousePressEvent中,您将无法从陷阱中逃脱。因此,您也将手工代码放在mouseReleaseEvent中。

完美。这取决于您在事件处理程序中编写命令的方式。 如果您不想平移leftButton,则可以在其中执行相同的操作。 也就是说,您可以在LeftButtonMidButton之间切换事件!