EG/demo/test_gui_editor_standalone.py
2025-12-12 16:16:15 +08:00

237 lines
8.1 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
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
from PyQt5.QtCore import Qt
# 模拟world对象
class MockWorld:
def __init__(self):
self.gui_elements = [] # 存储GUI元素
def createGUIButton(self, pos, text, scale):
"""模拟创建GUI按钮"""
print(f"模拟创建按钮: {text} at {pos} scale {scale}")
button = MockGUIElement("button", text, pos, scale)
self.gui_elements.append(button)
return button
def createGUILabel(self, pos, text, scale):
"""模拟创建GUI标签"""
print(f"模拟创建标签: {text} at {pos} scale {scale}")
label = MockGUIElement("label", text, pos, scale)
self.gui_elements.append(label)
return label
def createGUIEntry(self, pos, text, scale):
"""模拟创建GUI输入框"""
print(f"模拟创建输入框: {text} at {pos} scale {scale}")
entry = MockGUIElement("entry", text, pos, scale)
self.gui_elements.append(entry)
return entry
def createGUISlider(self, pos, text, scale):
"""模拟创建GUI滑块"""
print(f"模拟创建滑块: {text} at {pos} scale {scale}")
slider = MockGUIElement("slider", text, pos, scale)
self.gui_elements.append(slider)
return slider
def createGUI3DText(self, pos, text, scale):
"""模拟创建3D文本"""
print(f"模拟创建3D文本: {text} at {pos} scale {scale}")
text3d = MockGUIElement("3d_text", text, pos, scale)
self.gui_elements.append(text3d)
return text3d
def createGUIVirtualScreen(self, pos, size, text):
"""模拟创建虚拟屏幕"""
print(f"模拟创建虚拟屏幕: {text} at {pos} size {size}")
screen = MockGUIElement("virtual_screen", text, pos, 1.0, size=size)
self.gui_elements.append(screen)
return screen
def deleteGUIElement(self, element):
"""模拟删除GUI元素"""
if element in self.gui_elements:
self.gui_elements.remove(element)
print(f"模拟删除GUI元素: {element.text}")
return True
return False
def editGUIElement(self, element, property_name, value):
"""模拟编辑GUI元素"""
if property_name == "text":
element.text = value
print(f"模拟编辑GUI元素文本: {element.text} -> {value}")
elif property_name == "position":
element.pos = value
print(f"模拟编辑GUI元素位置: {element.pos} -> {value}")
elif property_name == "scale":
element.scale = value
print(f"模拟编辑GUI元素缩放: {element.scale} -> {value}")
return True
class MockGUIElement:
"""模拟GUI元素"""
def __init__(self, gui_type, text, pos, scale, size=None):
self.gui_type = gui_type
self.text = text
self.pos = pos
self.scale = scale
self.size = size or (1, 1)
def getTag(self, tag_name):
"""模拟获取标签"""
if tag_name == "gui_type":
return self.gui_type
elif tag_name == "gui_text":
return self.text
return ""
def setTag(self, tag_name, value):
"""模拟设置标签"""
if tag_name == "gui_text":
self.text = value
def getPos(self):
"""模拟获取位置"""
return MockVector3(self.pos)
def setPos(self, *args):
"""模拟设置位置"""
if len(args) == 1:
self.pos = (args[0].getX(), args[0].getY(), args[0].getZ())
else:
self.pos = args[:3]
def getScale(self):
"""模拟获取缩放"""
return MockVector3((self.scale, self.scale, self.scale))
def setScale(self, *args):
"""模拟设置缩放"""
if len(args) == 1:
if hasattr(args[0], 'getX'):
self.scale = args[0].getX()
else:
self.scale = args[0]
else:
self.scale = args[0]
class MockVector3:
"""模拟三维向量"""
def __init__(self, values):
if isinstance(values, (list, tuple)):
self.x, self.y, self.z = values[:3]
else:
self.x = self.y = self.z = values
def getX(self):
return self.x
def getY(self):
return self.y
def getZ(self):
return self.z
class TestMainWindow(QMainWindow):
"""测试主窗口"""
def __init__(self):
super().__init__()
self.world = MockWorld()
self.gui_editor_window = None
self.setupUI()
def setupUI(self):
"""设置UI"""
self.setWindowTitle("GUI编辑器测试")
self.setGeometry(100, 100, 400, 200)
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout(central_widget)
# 打开GUI编辑器按钮
open_button = QPushButton("打开GUI编辑器")
open_button.clicked.connect(self.openGUIEditor)
layout.addWidget(open_button)
# 添加一些测试GUI元素按钮
add_button = QPushButton("添加测试GUI元素")
add_button.clicked.connect(self.addTestGUIElements)
layout.addWidget(add_button)
# 显示状态
self.status_label = QPushButton("状态: 准备就绪")
self.status_label.setEnabled(False)
layout.addWidget(self.status_label)
def openGUIEditor(self):
"""打开GUI编辑器"""
try:
from gui_editor_window import GUIEditorWindow
if self.gui_editor_window is None:
self.gui_editor_window = GUIEditorWindow(world=self.world)
self.gui_editor_window.editor_closed.connect(self.onGUIEditorClosed)
self.gui_editor_window.show()
self.status_label.setText("状态: GUI编辑器已打开")
print("GUI编辑器窗口已打开")
else:
self.gui_editor_window.raise_()
self.gui_editor_window.activateWindow()
except ImportError as e:
print(f"无法导入GUI编辑器: {e}")
self.status_label.setText("状态: 导入GUI编辑器失败")
except Exception as e:
print(f"打开GUI编辑器失败: {e}")
self.status_label.setText(f"状态: 打开失败 - {e}")
def onGUIEditorClosed(self):
"""GUI编辑器关闭回调"""
self.gui_editor_window = None
self.status_label.setText("状态: GUI编辑器已关闭")
print("GUI编辑器窗口已关闭")
def addTestGUIElements(self):
"""添加测试GUI元素"""
# 添加一些测试元素
self.world.createGUIButton((0, 0, 0), "测试按钮", 0.08)
self.world.createGUILabel((3, 0, 0), "测试标签", 0.06)
self.world.createGUI3DText((0, 5, 0), "测试3D文本", 0.5)
# 如果GUI编辑器窗口打开同步元素
if self.gui_editor_window:
self.gui_editor_window.syncGUIElements()
self.status_label.setText(f"状态: 已添加测试元素,总计 {len(self.world.gui_elements)}")
def main():
"""主函数"""
app = QApplication(sys.argv)
# 创建测试窗口
main_window = TestMainWindow()
main_window.show()
print("GUI编辑器测试启动")
print("点击'打开GUI编辑器'按钮来测试独立的GUI编辑器窗口")
sys.exit(app.exec_())
if __name__ == "__main__":
main()