EG/demo/test_main_gui.py
2025-07-02 09:49:59 +08:00

130 lines
4.2 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
# -*- coding: utf-8 -*-
"""
主程序GUI功能直接测试
使用工具栏按钮创建GUI元素并验证显示
"""
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
import sys
import os
import time
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from PyQt5.QtCore import QTimer
# 导入主程序
from test import MyWorld, CustomPanda3DWidget
def testMainProgramGUI():
"""测试主程序的GUI功能"""
print("=== 测试主程序GUI功能 ===")
app = QApplication(sys.argv)
# 创建主程序的世界对象
world = MyWorld()
# 创建窗口
mainWindow = QMainWindow()
mainWindow.setWindowTitle("主程序GUI测试")
mainWindow.setGeometry(100, 100, 800, 600)
# 创建Panda3D部件
pandaWidget = CustomPanda3DWidget(world)
mainWindow.setCentralWidget(pandaWidget)
# 显示窗口
mainWindow.show()
# 使用定时器延迟创建GUI元素
def createTestGUIElements():
print("\n开始创建GUI元素...")
try:
# 使用不同的测试坐标
test_positions = [
(0, 0, 0), # 中心
(-5, 0, 0), # 左侧
(5, 0, 0), # 右侧
(0, 0, 5), # 上方
(0, 0, -5), # 下方
]
# 创建按钮
print("创建按钮...")
for i, pos in enumerate(test_positions):
button = world.createGUIButton(pos, f"按钮{i+1}", 0.08)
print(f" 按钮{i+1}: 位置{pos} -> 屏幕位置{button.getPos() if button else 'None'}")
# 创建标签
print("创建标签...")
label_positions = [
(0, 0, -8), # 中心下方
(-8, 0, 0), # 左侧
(8, 0, 0), # 右侧
]
for i, pos in enumerate(label_positions):
label = world.createGUILabel(pos, f"标签{i+1}", 0.06)
print(f" 标签{i+1}: 位置{pos} -> 屏幕位置{label.getPos() if label else 'None'}")
# 创建输入框
print("创建输入框...")
entry_positions = [
(0, 0, -12), # 中心下方
(-10, 0, -8), # 左下
]
for i, pos in enumerate(entry_positions):
entry = world.createGUIEntry(pos, f"输入框{i+1}", 0.05)
print(f" 输入框{i+1}: 位置{pos} -> 屏幕位置{entry.getPos() if entry else 'None'}")
# 创建3D元素作为对比
print("创建3D元素...")
world.createGUI3DText((0, 5, 2), "3D测试文本", 0.5)
world.createGUIVirtualScreen((3, 8, 0), (2, 1), "测试屏幕")
print(f"\n总共创建了 {len(world.gui_elements)} 个GUI元素")
# 检查aspect2d的子节点
print(f"\naspect2d子节点数量: {world.aspect2d.getNumChildren()}")
for i in range(world.aspect2d.getNumChildren()):
child = world.aspect2d.getChild(i)
print(f" 子节点{i}: {child.getName()}")
# 显示消息框告知结果
msg = f"""GUI元素创建完成
创建的元素:
- 5个按钮
- 3个标签
- 2个输入框
- 1个3D文本
- 1个虚拟屏幕
总计: {len(world.gui_elements)}
如果你看不到2D GUI元素按钮、标签、输入框
但能看到3D元素黄色文本、虚拟屏幕
说明坐标转换可能还有问题。
请观察窗口中的GUI元素。"""
QMessageBox.information(mainWindow, "GUI创建完成", msg)
except Exception as e:
error_msg = f"创建GUI元素时出错: {str(e)}"
print(error_msg)
QMessageBox.critical(mainWindow, "错误", error_msg)
# 2秒后创建GUI元素
QTimer.singleShot(2000, createTestGUIElements)
print("窗口已显示2秒后将创建GUI元素...")
print("请观察是否能看到所有GUI组件")
return app.exec_()
if __name__ == "__main__":
testMainProgramGUI()