165 lines
5.2 KiB
Python
165 lines
5.2 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
测试2D GUI组件显示修复
|
|
验证按钮、标签、输入框是否能正常显示
|
|
"""
|
|
|
|
import warnings
|
|
warnings.filterwarnings("ignore", category=DeprecationWarning)
|
|
|
|
from direct.showbase.ShowBase import ShowBase
|
|
from direct.gui.DirectGui import *
|
|
from panda3d.core import *
|
|
import os
|
|
|
|
class GUITestApp(ShowBase):
|
|
def __init__(self):
|
|
ShowBase.__init__(self)
|
|
|
|
# 设置背景色
|
|
self.setBackgroundColor(0.2, 0.2, 0.3)
|
|
|
|
# 尝试加载中文字体
|
|
self.chinese_font = self.loadChineseFont()
|
|
|
|
# 创建测试GUI元素
|
|
self.createTestGUI()
|
|
|
|
print("GUI测试应用启动成功!")
|
|
print(f"中文字体加载状态: {'成功' if self.chinese_font else '失败,使用默认字体'}")
|
|
|
|
def loadChineseFont(self):
|
|
"""尝试加载中文字体"""
|
|
font_paths = [
|
|
'/usr/share/fonts/truetype/wqy/wqy-microhei.ttc',
|
|
'/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc',
|
|
'/usr/share/fonts/truetype/arphic/ukai.ttc',
|
|
'/usr/share/fonts/truetype/arphic/uming.ttc',
|
|
]
|
|
|
|
for font_path in font_paths:
|
|
if os.path.exists(font_path):
|
|
try:
|
|
font = self.loader.loadFont(font_path)
|
|
if font:
|
|
return font
|
|
except:
|
|
continue
|
|
return None
|
|
|
|
def createTestGUI(self):
|
|
"""创建测试GUI元素"""
|
|
|
|
# 标题
|
|
self.title = OnscreenText(
|
|
text="2D GUI 显示测试",
|
|
pos=(0, 0.9),
|
|
scale=0.08,
|
|
fg=(1, 1, 1, 1),
|
|
align=TextNode.ACenter,
|
|
font=self.chinese_font if self.chinese_font else None
|
|
)
|
|
|
|
# 测试不同位置的GUI元素
|
|
positions = [
|
|
("中心", (0, 0, 0)),
|
|
("左侧", (-5, 0, 0)),
|
|
("右侧", (5, 0, 0)),
|
|
("上方", (0, 0, 5)),
|
|
("下方", (0, 0, -5))
|
|
]
|
|
|
|
self.gui_elements = []
|
|
y_offset = 0.6
|
|
|
|
for i, (name, pos) in enumerate(positions):
|
|
# 计算屏幕位置(模拟修复后的坐标转换)
|
|
gui_pos = (pos[0] * 0.1, 0, pos[2] * 0.1)
|
|
|
|
# 创建按钮
|
|
button = DirectButton(
|
|
text=f"{name}按钮",
|
|
pos=gui_pos,
|
|
scale=0.08,
|
|
command=self.onButtonClick,
|
|
extraArgs=[name],
|
|
frameColor=(0.2, 0.6, 0.8, 1),
|
|
text_font=self.chinese_font if self.chinese_font else None,
|
|
rolloverSound=None,
|
|
clickSound=None
|
|
)
|
|
|
|
# 偏移位置创建标签
|
|
label_pos = (gui_pos[0], 0, gui_pos[2] - 0.2)
|
|
label = DirectLabel(
|
|
text=f"{name}标签",
|
|
pos=label_pos,
|
|
scale=0.06,
|
|
frameColor=(0, 0, 0, 0),
|
|
text_fg=(1, 1, 0, 1),
|
|
text_font=self.chinese_font if self.chinese_font else None
|
|
)
|
|
|
|
# 偏移位置创建输入框
|
|
entry_pos = (gui_pos[0], 0, gui_pos[2] - 0.4)
|
|
entry = DirectEntry(
|
|
text="",
|
|
pos=entry_pos,
|
|
scale=0.05,
|
|
command=self.onEntrySubmit,
|
|
extraArgs=[name],
|
|
initialText=f"{name}输入框",
|
|
numLines=1,
|
|
width=12,
|
|
focus=0
|
|
)
|
|
|
|
self.gui_elements.extend([button, label, entry])
|
|
|
|
print(f"创建了 {name} 位置的GUI元素:")
|
|
print(f" - 按钮位置: {gui_pos}")
|
|
print(f" - 标签位置: {label_pos}")
|
|
print(f" - 输入框位置: {entry_pos}")
|
|
|
|
# 创建退出按钮
|
|
self.exitButton = DirectButton(
|
|
text="退出测试",
|
|
pos=(0, 0, -0.8),
|
|
scale=0.06,
|
|
command=self.exitTest,
|
|
frameColor=(0.8, 0.2, 0.2, 1),
|
|
text_font=self.chinese_font if self.chinese_font else None
|
|
)
|
|
|
|
# 状态信息
|
|
self.statusText = OnscreenText(
|
|
text="如果你能看到各个位置的按钮、标签和输入框,说明修复成功!",
|
|
pos=(0, -0.9),
|
|
scale=0.04,
|
|
fg=(0, 1, 0, 1),
|
|
align=TextNode.ACenter,
|
|
font=self.chinese_font if self.chinese_font else None
|
|
)
|
|
|
|
def onButtonClick(self, name):
|
|
"""按钮点击事件"""
|
|
print(f"点击了 {name} 按钮")
|
|
self.statusText.setText(f"最后点击: {name} 按钮")
|
|
|
|
def onEntrySubmit(self, text, name):
|
|
"""输入框提交事件"""
|
|
print(f"{name} 输入框内容: {text}")
|
|
self.statusText.setText(f"{name} 输入框: {text}")
|
|
|
|
def exitTest(self):
|
|
"""退出测试"""
|
|
print("退出GUI测试")
|
|
self.userExit()
|
|
|
|
if __name__ == "__main__":
|
|
print("启动2D GUI显示测试...")
|
|
print("如果修复成功,你应该能看到不同位置的按钮、标签和输入框")
|
|
app = GUITestApp()
|
|
app.run() |