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