首页 > 解决方案 > PyQtGraph 如何使用按钮放大

问题描述

我将 PyQTGraph 与 PyQT5 一起使用,并且我添加了一个 GraphicsLayoutWidget,带有鼠标事件来添加标记。

canvas_ruler = pg.GraphicsLayoutWidget()
formLayout.addWidget(self.canvas_ruler)
plot_ruler = canvas_ruler.addPlot(name="Ruler")

plot_ruler.hideAxis('left')

canvas_ruler.scene().sigMouseMoved.connect(self.mouseMoved)
canvas_ruler.scene().sigMouseClicked.connect(self.mouseClicked)
plot_ruler.setMouseEnabled(x=True, y=False)

我想添加的是 2 个按钮,用于放大和缩小,当前鼠标滚轮事件会放大/缩小。但我想禁用它并为其添加 2 个按钮。我可能应该:

setMouseEnabled(x=False, y=False)

但我不知道如何使用代码触发缩放,我找不到它的 API,比如 sigMouseMoved.connect。

标签: python-3.xpyqtgraph

解决方案


pyqtgraph 所做的最接近此(AFAIK)的本地操作是使用鼠标滚轮功能进行缩放。ViewBox 中的 MouseWheelEvent() 函数通过调用 ViewBox 函数 scaleBy() 来实现这一点。

您可以看到所有输入的来源和更多细节,但主要的是 s(缩放)和 center(围绕其缩放的中心)。将 center 保留为 None 以围绕图的中心进行缩放。

将 x 和 y 缩放比例的元组传递给要缩放的函数,< 1 表示输入,> 1 表示输出。例如:

    def handle_plot_zoom_buttons(self, in_or_out):
        """
        see ViewBox.scaleBy()
        pyqtgraph wheel zoom is s = ~0.75
        """
        s = 0.9
        zoom = (s, s) if in_or_out == "in" else (1/s, 1/s)
        self.plot.vb.scaleBy(zoom)

推荐阅读