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