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
相关产品推荐
相关产品推荐

