EG/test_chinese_font.py
2026-01-08 16:30:59 +08:00

149 lines
5.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
测试中文字体显示的调试脚本
"""
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '.'))
from panda3d.core import loadPrcFileData
from direct.showbase.ShowBase import ShowBase
import p3dimgui
from imgui_bundle import imgui
import platform
from pathlib import Path
class ChineseFontTest(ShowBase):
def __init__(self):
# 设置窗口
loadPrcFileData('', 'win-size 800 600')
ShowBase.__init__(self)
# 初始化ImGui
p3dimgui.init()
# 测试字体加载
self.test_font_loading()
# 接受ImGui新帧事件
self.accept('imgui-new-frame', self._new_frame)
self.accept('`', self._toggle_imgui)
self.show_test_window = True
def test_font_loading(self):
"""测试字体加载"""
print("=== 开始字体测试 ===")
# 检查系统
system = platform.system().lower()
print(f"系统: {system}")
# 获取字体路径
font_paths = []
if system == "linux":
font_paths = [
"/usr/share/fonts/truetype/wqy/wqy-microhei.ttc",
"/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc",
"/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
]
elif system == "windows":
font_paths = [
"C:/Windows/Fonts/msyh.ttc",
"C:/Windows/Fonts/simhei.ttf",
]
elif system == "darwin":
font_paths = [
"/System/Library/Fonts/PingFang.ttc",
"/System/Library/Fonts/STHeiti.ttc",
]
# 测试每个字体
for font_path in font_paths:
if Path(font_path).exists():
print(f"✓ 字体文件存在: {font_path}")
try:
# 尝试加载字体
font = self.imgui.io.fonts.add_font_from_file_ttf(font_path, 16.0)
print(f" ✓ 字体加载成功")
# 检查字体信息
font_info = self.imgui.io.fonts.fonts
print(f" 字体数量: {len(font_info)}")
# 尝试获取字符集
try:
# 方法1尝试获取中文字符集
chinese_ranges = imgui.get_io().fonts.get_glyph_ranges_chinese_full()
print(f" ✓ 中文字符集获取成功,范围: {len(chinese_ranges)} 个字符")
except:
try:
# 方法2尝试获取中文字符集简化版
chinese_ranges = imgui.get_io().fonts.get_glyph_ranges_chinese()
print(f" ✓ 中文字符集获取成功(简化版),范围: {len(chinese_ranges)} 个字符")
except:
try:
# 方法3尝试获取默认字符集
default_ranges = imgui.get_io().fonts.get_glyph_ranges_default()
print(f" ✓ 默认字符集获取成功,范围: {len(default_ranges)} 个字符")
print(f" ⚠ 使用默认字符集,可能不支持中文")
except Exception as e:
print(f" ⚠ 字符集获取失败: {e}")
print(f" ⚠ 将使用默认字符集")
break
except Exception as e:
print(f" ✗ 字体加载失败: {e}")
else:
print(f"✗ 字体文件不存在: {font_path}")
print("=== 字体测试完成 ===")
def _toggle_imgui(self):
if not self.imgui.isKeyboardCaptured():
self.imgui.toggle()
def _new_frame(self):
# 绘制测试窗口
if self.show_test_window:
imgui.show_demo_window()
# 中文测试窗口
expanded, opened = imgui.begin("中文显示测试", True)
if expanded:
imgui.text("基础中文测试:")
imgui.text("你好,世界!")
imgui.text("这是一个中文测试")
imgui.text("引擎初始化完成")
imgui.text("选择和变换系统")
imgui.text("脚本管理系统")
imgui.separator()
imgui.text("特殊字符测试:")
imgui.text("标点符号:,。!?;:""''()【】")
imgui.separator()
imgui.text("数字测试:")
imgui.text("一二三四五六七八九十")
imgui.separator()
if imgui.button("测试按钮"):
print("中文按钮被点击")
imgui.same_line()
if imgui.button("另一个按钮"):
print("另一个中文按钮")
imgui.separator()
changed, text = imgui.input_text("输入中文", "在这里输入中文")
if changed:
print(f"输入的中文: {text}")
imgui.end()
if __name__ == "__main__":
test = ChineseFontTest()
test.run()