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

使用pyglet绘制三角形时出现'vertex_list'属性不存在错误

问题原因

你遇到的AttributeError是因为pyglet 2.0及以上版本移除了pyglet.graphics.vertex_list这个旧API——这个接口在1.x版本中存在,但新版本已废弃并替换为新的实现方式。

解决办法

办法一:降级到pyglet 1.x版本

如果想继续使用原有代码,直接安装旧版本即可:

pip install pyglet==1.5.27

安装完成后,你的原有代码就能正常运行。

办法二:适配pyglet 2.x新API

pyglet 2.x推荐使用pyglet.graphics.VertexList(注意大小写:旧API是小写开头,新API是大写开头),同时需要修正代码中的小问题:

  • 移除手动调用window.on_draw(),pyglet的事件循环会自动触发这个方法
  • 颜色值250超出了c3B(无符号字节,范围0-255)的上限,改成255
  • 在on_draw中添加清屏操作,避免画面残留

修改后的完整代码:

from pyglet.gl import *
import pyglet

class Triangle:
    def __init__(self) -> None:
        self.vertex_list = pyglet.graphics.VertexList(
            3,
            ('v3f', [-0.5, -0.5, 0.0, 0.5, -0.5, 0.0, 0.0, 0.5, 0.0]),
            ('c3B', [100, 200, 220, 200, 110, 100, 100, 255, 100])
        )

class MyWindow(pyglet.window.Window):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.set_minimum_size(400, 300)
        self.triangle = Triangle()
        glClearColor(0.1, 0.1, 0.1, 1.0)

    def on_draw(self):
        self.clear()
        self.triangle.vertex_list.draw(GL_TRIANGLES)

    def on_resize(self, width, height):
        glViewport(0, 0, width, height)
    
if __name__ == "__main__":
    window = MyWindow(1280, 720, "Hello", resizable=True)
    pyglet.app.run()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:01:21