📜  PyQtGraph - 查看条形图的更改事件(1)

📅  最后修改于: 2023-12-03 14:45:51.595000             🧑  作者: Mango

PyQtGraph - 查看条形图的更改事件

PyQtGraph是一个专为数据可视化而设计的Python库,它提供了各种图表和绘图工具来展示数据。在本文中,我们将重点探讨如何使用PyQtGraph库创建条形图,并查看它们的更改事件。

创建条形图

首先,我们需要安装PyQtGraph库。可以使用pip命令来进行安装:

pip install pyqtgraph

接下来,让我们来创建一个简单的条形图。以下是一个示例代码:

import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication, QMainWindow

class MainWindow(QMainWindow):

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

        # 创建一个条形图
        self.plot = pg.BarGraphItem(x=[1, 2, 3, 4, 5], height=[10, 50, 30, 70, 80],
                                    width=0.3, brush='r')

        # 创建一个画板
        self.canvas = pg.GraphicsLayoutWidget(parent=self)
        self.setCentralWidget(self.canvas)

        # 在画板上添加绘图区域
        self.plot_area = self.canvas.addPlot()
        self.plot_area.addItem(self.plot)

if __name__ == '__main__':
    app = QApplication([])
    win = MainWindow()
    win.show()
    app.exec_()

在上面的代码中,我们使用pg.BarGraphItem类创建了一个有5个条形的条形图,并将其添加到画板上。我们使用QMainWindow类创建了一个主窗口,并将其设置为应用程序的主要工作区域。

运行以上代码,将会得到以下条形图:

Bar Graph

查看更改事件

现在,我们要探索的问题是如何查看条形图中的更改事件。例如,当我们更改条形图中的条形高度时,如何获取更改通知?

在PyQtGraph中,我们可以将信号与槽机制用于检测条形图的更改事件。以下是一些可用的信号和槽:

  • sigBarClicked(item, ev):当条形图上的一个条形被单击时触发此信号。
  • sigBarsHovered(over, prev):当鼠标移动到一个条形上时触发此信号。
  • sigBarsChanged():当条形图中条形的高度发生更改时触发此信号。

我们将使用sigBarsChanged()信号来检测条形图的更改事件。以下是我们更新后的代码:

import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication, QMainWindow

class MainWindow(QMainWindow):

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

        # 创建一个条形图
        self.plot = pg.BarGraphItem(x=[1, 2, 3, 4, 5], height=[10, 50, 30, 70, 80],
                                    width=0.3, brush='r')
        self.plot.sigBarsClicked.connect(self.bar_clicked)
        self.plot.sigBarsHovered.connect(self.bar_hovered)
        self.plot.sigBarsChanged.connect(self.bar_changed)

        # 创建一个画板
        self.canvas = pg.GraphicsLayoutWidget(parent=self)
        self.setCentralWidget(self.canvas)

        # 在画板上添加绘图区域
        self.plot_area = self.canvas.addPlot()
        self.plot_area.addItem(self.plot)

    def bar_clicked(self, item, mouse_ev):
        print(f'Clicked item: {item}')
        print(f'Mouse event: {mouse_ev}')

    def bar_hovered(self, over_bar, prev_bar):
        print(f'Over bar: {over_bar}')
        print(f'Previous bar: {prev_bar}')

    def bar_changed(self):
        print('Bars changed!')

if __name__ == '__main__':
    app = QApplication([])
    win = MainWindow()
    win.show()
    app.exec_()

在上面的代码中,我们添加了3个函数来处理sigBarsClicked()sigBarsHovered()sigBarsChanged()信号。当条形被单击、悬停或高度发生更改时,分别会调用这些函数。这些函数只是简单地打印一些调试信息,为了向我们表明信号确实得到了触发。

接下来,我们对条形进行操作,看看是否可以看到这些更改通知。当我们拖动图表中的一个条形时,会看到以下输出:

Bars changed!

我们确实收到了更改通知。同样,当我们单击一个条形时:

Clicked item: {'index': 0, 'x': 1.2, 'height': 20.0}
Mouse event: PyQt5.QtGui.QMouseEvent(...)

我们看到了已单击的条形对象和它的鼠标事件。我们还可以使用类似的方法处理悬停事件。

结论

通过使用PyQtGraph库,可以轻松地创建各种形式的数据可视化。对于条形图,我们可以使用pg.BarGraphItem类创建条形图,然后使用信号和槽来检测更改事件。使用sigBarsChanged()信号可以帮助我们检测条形图中条形高度的更改。