仅在启用 OpenGL 时更新笔时 PyQt5Chart Series 不会重绘
PyQt5Chart Series does not redraw when pen is updated only when OpenGL is enabled
我已经为自定义图例小部件定义了以下事件过滤器。基本上,当鼠标悬停时,我想让线条变粗。
当所有系列都禁用 OpenGL 时,此代码段有效。但是,当启用 OpenGL 时,它不会更改笔。
# self.series is a list
def eventFilter(self, obj, event):
if event.type() == QEvent.Enter:
pen = QPen()
pen.setColor(self.series[0].pen().color())
pen.setWidth(6)
pen.setCosmetic(False)
list(map(lambda series: series.setPen(pen), self.series))
return True
elif event.type() == QEvent.Leave:
pen = QPen()
pen.setColor(self.series[0].pen().color())
pen.setWidth(3)
pen.setCosmetic(False)
list(map(lambda series: series.setPen(pen), self.series))
return True
return False
这是 Qt 中的错误吗?
我发现的解决方法是在更换笔后切换每个系列的可见性:
for series in self.series:
series.setPen(pen)
series.setVisible(False)
series.setVisible(True))
编辑:
感谢@eyllanesc 这个类似且更优雅的解决方案:
# Turns out this doesn't actually work for some reason
series.chart().update()
我已经为自定义图例小部件定义了以下事件过滤器。基本上,当鼠标悬停时,我想让线条变粗。
当所有系列都禁用 OpenGL 时,此代码段有效。但是,当启用 OpenGL 时,它不会更改笔。
# self.series is a list
def eventFilter(self, obj, event):
if event.type() == QEvent.Enter:
pen = QPen()
pen.setColor(self.series[0].pen().color())
pen.setWidth(6)
pen.setCosmetic(False)
list(map(lambda series: series.setPen(pen), self.series))
return True
elif event.type() == QEvent.Leave:
pen = QPen()
pen.setColor(self.series[0].pen().color())
pen.setWidth(3)
pen.setCosmetic(False)
list(map(lambda series: series.setPen(pen), self.series))
return True
return False
这是 Qt 中的错误吗?
我发现的解决方法是在更换笔后切换每个系列的可见性:
for series in self.series:
series.setPen(pen)
series.setVisible(False)
series.setVisible(True))
编辑:
感谢@eyllanesc 这个类似且更优雅的解决方案:
# Turns out this doesn't actually work for some reason
series.chart().update()