python-3.x - 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。
解决方案
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)
推荐阅读
- python - 如何对两个列表进行排序并绘制它们?
- r - 评估 ... 当其他函数参数默认为 NULL
- python - ProgrammingError: (1064, ..) for the right syntax to use near '))' at line 1")
- c# - 为什么我的代码认为一个值是 Microsoft.IdentityModel.Json.Linq.JObject 而实际上应该是 Newtonsoft.Json.Linq.JObject?
- node.js - Powershell Compress-Archive 未正确发布 Node.js AWS lambda 层
- python - 查找发送帖子请求的 url
- c# - DataGridViewImageColumn 背景为黑色
- rust - 在 Rust 的同一个 crate 文件中从另一个模块调用一个模块的函数
- swift - 如何在 Swift 中向 URL 目录添加附加值?
- audio - 关于客户端回声消除的建议