更新 GLMeshItem 的颜色

问题描述 投票:0回答:2

我一直在尝试更新 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)

python pyqtgraph
2个回答
1
投票

好吧,经过一番搜索,我找到了答案。

代替

self._mesh_model.setColor(color)
,其中
color
是 RGBA 形式的元组,我使用的是:
QtGui.QColor(R, G, B)
,其中 R、G 和 B 是 0 到 255 之间的值。

现在网格颜色按预期更新。


0
投票

我最近遇到了类似的问题。

就我而言,我想更新线框颜色。在搜索了

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()

效果很好。希望这对未来的人有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.