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

155 lines
5.3 KiB
Python
Raw Permalink 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 -*-
"""
Qt环境专用GUI测试
"""
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLabel
from PyQt5.QtCore import Qt
from QPanda3D.QPanda3DWidget import QPanda3DWidget
from QPanda3D.Panda3DWorld import Panda3DWorld
from direct.gui.DirectGui import *
from direct.gui.OnscreenText import OnscreenText
from panda3d.core import *
class QtOnlyWorld(Panda3DWorld):
def __init__(self):
super().__init__()
print("=== 专用Qt环境测试 ===")
self.setBackgroundColor(0.2, 0.2, 0.3)
# 检查环境差异
print(f"基类: {self.__class__.__bases__}")
print(f"render2d: {self.render2d}")
print(f"aspect2d: {self.aspect2d}")
print(f"窗口类型: {type(self.win) if hasattr(self, 'win') else 'None'}")
# 检查更多属性
if hasattr(self, 'win'):
print(f"窗口: {self.win}")
print(f"窗口大小: {self.win.getXSize()} x {self.win.getYSize()}")
print(f"图形引擎: {self.graphicsEngine}")
print(f"显示区域数量: {self.win.getNumDisplayRegions() if hasattr(self, 'win') else 'None'}")
# 延迟创建GUI
self.taskMgr.doMethodLater(0.5, self.createTestGUI, "create-gui")
def createTestGUI(self, task=None):
"""创建测试GUI"""
print("\n--- Qt环境创建GUI ---")
# 检查2D渲染系统状态
print(f"render2d可用: {self.render2d is not None}")
print(f"aspect2d可用: {self.aspect2d is not None}")
print(f"camera2d可用: {hasattr(self, 'camera2d') and self.camera2d is not None}")
if hasattr(self, 'camera2d'):
print(f"camera2d位置: {self.camera2d.getPos()}")
print(f"camera2d朝向: {self.camera2d.getHpr()}")
# 创建标题文本 - 这通常能工作
try:
self.title = OnscreenText(
text="Qt Only Test",
pos=(0, 0.8),
scale=0.08,
fg=(1, 1, 1, 1),
align=TextNode.ACenter
)
print(f"✓ 标题创建成功: {self.title}")
print(f" 标题父节点: {self.title.getParent()}")
except Exception as e:
print(f"✗ 标题创建失败: {str(e)}")
# 创建DirectButton - 问题可能在这里
try:
self.testButton = DirectButton(
text="Test Button",
pos=(0, 0, 0),
scale=0.1,
command=self.onButtonClick,
frameColor=(1, 0, 0, 1),
text_font=None,
rolloverSound=None,
clickSound=None
)
print(f"✓ 按钮创建成功: {self.testButton}")
print(f" 按钮父节点: {self.testButton.getParent()}")
print(f" 按钮位置: {self.testButton.getPos()}")
print(f" 按钮隐藏状态: {self.testButton.isHidden()}")
# 检查按钮的PGButton节点
pg_button = self.testButton.node()
print(f" PGButton节点: {pg_button}")
print(f" PGButton类型: {type(pg_button)}")
except Exception as e:
print(f"✗ 按钮创建失败: {str(e)}")
import traceback
traceback.print_exc()
# 检查aspect2d的子节点
print(f"\naspect2d子节点数量: {self.aspect2d.getNumChildren()}")
for i in range(self.aspect2d.getNumChildren()):
child = self.aspect2d.getChild(i)
print(f" 子节点 {i}: {child}")
# 尝试手动强制渲染
try:
if hasattr(self, 'graphicsEngine'):
print("\n尝试强制渲染...")
self.graphicsEngine.renderFrame()
print("强制渲染完成")
except Exception as e:
print(f"强制渲染失败: {str(e)}")
return task.done if task else None
def onButtonClick(self):
print("🎯 Qt环境按钮被点击了")
def main():
print("启动Qt环境专用测试...")
app = QApplication(sys.argv)
# 创建主窗口
mainWindow = QMainWindow()
mainWindow.setWindowTitle("Qt专用GUI测试")
mainWindow.setGeometry(100, 100, 800, 600)
# 创建布局
centralWidget = QWidget()
layout = QVBoxLayout(centralWidget)
# 添加说明
label = QLabel("Qt环境DirectGUI专用测试 - 检查控制台输出")
label.setAlignment(Qt.AlignCenter)
label.setStyleSheet("background-color: lightcoral; padding: 10px;")
layout.addWidget(label)
# 创建世界
world = QtOnlyWorld()
# 创建Panda3D部件
pandaWidget = QPanda3DWidget(world)
layout.addWidget(pandaWidget)
mainWindow.setCentralWidget(centralWidget)
mainWindow.show()
print("\nQt环境窗口已显示")
print("如果能看到红色按钮说明Qt环境下的DirectGUI是正常的")
print("如果看不到按钮但有标题说明DirectButton在Qt环境中有问题")
return app.exec_()
if __name__ == "__main__":
main()