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

PyQt6中鼠标悬浮图表时如何获取QLineSeries的正确名称

PyQt6折线图悬浮提示名称错误问题修复

问题根源

Python闭包存在延迟绑定特性:你在循环内定义的lambda函数,只有当hover事件触发、函数实际被调用时,才会去读取name变量的值。此时循环已经全部执行完毕,name变量存储的是最后一次循环的系列名称(也就是你遇到的Week 2),所以所有线条的提示都显示同一个名称。

修复代码

只需要给lambda添加默认参数,在函数定义阶段就绑定当前循环的name值即可:

for ls_Series in li_Points:
    self.ob_Chart_Viewer.chart.addSeries(ls_Series)
    name = ls_Series.name()
    # 新增默认参数current_name=name,提前绑定当前循环的系列名称
    ls_Series.hovered.connect(lambda point, current_name=name: QToolTip.showText(QCursor.pos(), "%s\nx:%.2f\ny: %.2f" % (current_name, point.x(), point.y())))
    ls_Series.clicked.connect(ls_Series.hide)
    ls_Series.attachAxis(self.ob_Chart_Viewer.axis_x)
    ls_Series.attachAxis(self.ob_Chart_Viewer.axis_y)

逻辑说明

lambda的默认参数会在函数创建时完成求值,每次循环都会把当前迭代的系列名称绑定到current_name上,后续触发hover事件时,就会使用预先绑定好的对应名称,不会被后续循环的赋值覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:36:03