我一直在尝试更新 3d pyqtgraph 图中 GLMeshItem 的颜色,并取得了一些成功。使用 GLMeshItem 类的
setColor()
成员,我可以最初设置颜色,有时,网格的面颜色会更新,但并非总是如此。
我过去曾经做过这个工作,所以我知道这是可能的,但这次似乎无法弄清楚。根据文档,
setColor()
将Set the default color to use when no vertex or face colors are specified.
我有点困惑,这是否意味着我可以动态更改颜色,或者仅最初设置颜色。
对于上下文,我有一个带有网格的 3D 图。我从文件中读取日期,然后想根据该数据设置网格的颜色。如果需要,我可以发布更多代码,但是我的程序有几百行长,并且很难提取必要的位以使问题可重现。如果有帮助的话我绝对可以这么做。现在这是我用来设置颜色的线:
_mesh_model 是一个 GLMeshItem。 颜色是 (R, G, B, Alpha) 形式的元组
self._mesh_model.setColor(color)
好吧,经过一番搜索,我找到了答案。
代替
self._mesh_model.setColor(color)
,其中 color
是 RGBA 形式的元组,我使用的是:QtGui.QColor(R, G, B)
,其中 R、G 和 B 是 0 到 255 之间的值。
现在网格颜色按预期更新。
我最近遇到了类似的问题。
就我而言,我想更新线框颜色。在搜索了
GLMeshItem
的源代码后,我意识到没有方法可以做到这一点。我最终不得不对 GLMeshItem
类进行子类化并添加一个新方法
from PySide6.QtGui import QColor
class VMeshItem(gl.GLMeshItem):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def setEdgeColor(self, color: QColor | tuple) -> None:
c = color
if isinstance(color, QColor):
c = color.getRgbF()
self.opts.update({"edgeColor": c})
self.update()
效果很好。希望这对未来的人有所帮助。