You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyQtGraph中点击并高亮曲线(基于PyQt5)

PyQt5+PyQtGraph曲线点击高亮实现

我基于PyQt5开发了一款数据可视化工具,用户可通过表格选择数据,并用PyQtGraph绘制图表,初始绘图代码如下:

graph_sheet = pg.GraphicsLayoutWidget()
layout_graph = graph_sheet.addLayout()
plot = pg.PlotItem()
layout_graph.addItem(plot)
line_item = plot.plot(graph_data[x_col], graph_data[y_col], pen=color, name=curve_name)

需求是实现点击多曲线图表中的任意曲线后高亮该曲线,方便后续通过滑块对选中曲线进行横竖移动,但最初绑定sigClicked信号后完全没有响应。

最终自行解决问题,步骤如下:

  • 创建PlotDataItem后,添加line_item.setCurveClickable(True)开启曲线的可点击特性
  • 为曲线绑定点击信号:curve.sigClicked.connect(lambda x: self.handle_curve_click(x))
  • 编写点击处理函数,通过修改画笔(mkPen)实现高亮:将选中曲线的线宽改为2,其余曲线恢复默认线宽1,代码如下:
def handle_curve_click(self, curve):
    print(f"Curve clicked: {curve}")  # 测试用输出
    self.selected_curve = curve

    # 修改选中曲线的画笔属性
    for graphtype, data in self.selectedGraphs.items():
        for line_item, inst in data[1:]:
            if line_item == curve:
                pen = line_item.opts['pen']
                pen = pg.mkPen(pen)
                selected_pen = pg.mkPen(color=pen.color(), width=2)  
                line_item.setPen(selected_pen)
            else:
                line_item.setPen(self.default_pen(line_item))

@staticmethod
def default_pen(line_item):
    pen = line_item.opts['pen']
    pen = pg.mkPen(pen)
    default_pen = pg.mkPen(color=pen.color(), width=1)
    return default_pen

内容的提问来源于stack exchange,提问作者Souleater

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:57:14