📜  PyQtGraph - 检查光标是否在散点图上(1)

📅  最后修改于: 2023-12-03 15:18:50.690000             🧑  作者: Mango

PyQtGraph - 检查光标是否在散点图上

PyQtGraph是一个用于创建交互式和实时数据可视化的Python库。它支持2D和3D的绘图,支持多种类型的数据可视化。在此简要介绍如何使用PyQtGraph在散点图上检测光标是否悬停。

安装

在终端输入以下指令:

pip install pyqtgraph
示例代码
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np

class ScatterPlotWidget(pg.GraphicsWindow):

    def __init__(self):
        super().__init__()

        self.setWindowTitle('Scatter Plot')

        self.scatter_plot = pg.ScatterPlotItem(pen=pg.mkPen(None), brush=pg.mkBrush(255, 255, 255, 120))
        self.addItem(self.scatter_plot)

        self.view_box = self.addViewBox()

        # 坐标轴设置
        self.view_box.setRange(xRange=[-10, 10], yRange=[-10, 10])
        self.view_box.setAspectLocked(True)
        self.view_box.setMouseEnabled(x=False, y=False)

        # 随机生成散点
        x = np.random.normal(size=50) * 2.0 + 5.0
        y = np.random.normal(size=50) * 2.0 + 0.0
        self.scatter_plot.setData(x, y)

        # 信号槽连接
        self.scene().sigMouseMoved.connect(self.on_mouse_moved)

    def on_mouse_moved(self, event):
        if self.scatter_plot.hoverPoints is not None:
            print(self.scatter_plot.hoverPoints)

if __name__ == '__main__':

    app = QtGui.QApplication([])
    widget = ScatterPlotWidget()
    widget.show()
    app.exec_()
代码解释

代码创建了一个ScatterPlotWidget类,用来处理散点图的创建和光标悬停检测的逻辑。在该类的构造函数中,首先调用基类的构造函数以初始化窗口,然后初始化散点图和视图框。散点图被添加到了视图框中,并随机生成50个点用于绘制。

视图框被设置为对坐标轴进行锁定,这样长宽比将被保留,同时x轴和y轴的范围被初始化为10。调用setMouseEnabled方法使得鼠标不能移动图形,它仅仅响应光标事件,以便能够检测到光标的位置。

最后,我们将信号sigMouseMoved连接到on_mouse_moved的槽,以便能够检测到光标的位置,并输出当前所指向的散点信息。

当光标移动到任意一个散点上时,鼠标会悬停在其上,并打印出该散点的信息。

## 总结

在本文中,你学习了如何使用PyQtGraph创建散点图,并检测光标是否悬停在散点上,从而让我们能够更好的与我们的数据交互。