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

使用Pyglet库时遭遇AttributeError: 'str' object has no attribute '_own_batch'错误的技术求助

AttributeError when using pyglet.text.Label: 'str' object has no attribute '_own_batch'

这个错误的原因很直观——你用错了pyglet.text.Label的调用方式!

错误根源

pyglet.text.Label.draw()是一个实例方法,它需要先基于Label类创建一个实例对象,才能被调用。但你的代码里直接用Label.draw("Hello world application"),相当于把字符串"Hello world application"当成了方法的self参数(也就是Label实例)传递进去。draw方法内部需要访问实例的_own_batch属性,可字符串对象根本没有这个属性,于是就抛出了AttributeError。

解决方法

你需要先正确创建Label的实例,把文本内容作为参数传给Label构造函数,之后再在on_draw事件里调用这个实例的draw()方法。另外建议加上坐标和锚点参数,确保文字能显示在窗口的可见区域(默认位置是窗口左下角,可能看不到)。

修正后的完整代码:

import pyglet
window = pyglet.window.Window()

# 先创建Label实例,设置位置让文字居中显示
label = pyglet.text.Label("Hello world application",
                          x=window.width//2, y=window.height//2,
                          anchor_x='center', anchor_y='center')

@window.event
def on_draw():
    window.clear()
    label.draw()  # 调用实例的draw方法

pyglet.app.run()

关键修正点

  • 替换了错误的Label.draw("...")写法,改为创建Label实例pyglet.text.Label("...")
  • 添加了x、y坐标和锚点参数,让文字显示在窗口中央,避免默认位置导致的不可见问题
  • 在on_draw函数中调用的是Label实例的draw()方法,而非类的方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:53:12