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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:12:34