149 lines
5.5 KiB
Python
149 lines
5.5 KiB
Python
#!/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() |