如何让HTMLLabel()在Pyglet 2.0版本中正常工作?
Pyglet 2.0中HTMLLabel无法显示内容的解决方法
问题原因
Pyglet 2.0对HTMLLabel的<font>标签size属性的解析逻辑发生了变更:
- 在1.5.x版本中,
size属性是相对点数,size="4"等价于4×12pt=48pt,显示足够清晰; - 在2.0.x版本中,
size属性直接对应像素值,size="4"仅代表4像素的字号,在200×200的窗口中几乎不可见,因此看起来是空白窗口。
另外,HTMLLabel默认文字颜色为黑色,你设置了白色背景,即使字号正常也需要确保颜色对比度足够。
修复方案
方案1:调整<font>标签的size值
将size属性改为合适的像素值,比如size="24":
import pyglet from pyglet.gl import * window = pyglet.window.Window(200,200) glClearColor(1, 1, 1, 1) label = pyglet.text.HTMLLabel( '<font face="Times New Roman" size="24">Hello, <i>world</i></font>', x=window.width//2, y=window.height//2, anchor_x='center', anchor_y='center') @window.event def on_draw(): window.clear() label.draw() pyglet.app.run()
方案2:使用CSS样式控制(更灵活)
Pyglet 2.0支持在HTML中使用内联CSS,能更精准控制样式:
import pyglet from pyglet.gl import * window = pyglet.window.Window(200,200) glClearColor(1, 1, 1, 1) label = pyglet.text.HTMLLabel( '<span style="font-family: Times New Roman; font-size: 24px; color: #000;">Hello, <i>world</i></span>', x=window.width//2, y=window.height//2, anchor_x='center', anchor_y='center') @window.event def on_draw(): window.clear() label.draw() pyglet.app.run()
方案3:改用Pyglet 2.0推荐的RichLabel
RichLabel是2.0版本新增的富文本组件,功能更完善,推荐替代HTMLLabel:
import pyglet from pyglet.gl import * window = pyglet.window.Window(200,200) glClearColor(1, 1, 1, 1) # 使用RichLabel,类Markdown语法实现富文本 label = pyglet.text.RichLabel( 'Hello, *world*', font_name='Times New Roman', font_size=24, color=(0,0,0,255), x=window.width//2, y=window.height//2, anchor_x='center', anchor_y='center') @window.event def on_draw(): window.clear() label.draw() pyglet.app.run()
内容的提问来源于stack exchange,提问作者Apostolos
相关产品推荐
相关产品推荐

