1
0
forked from Rowland/EG

1.修改属性面板布局

This commit is contained in:
陈横 2025-08-14 17:04:24 +08:00
parent 4f75cfb1a9
commit 05dec0d62d
5 changed files with 868 additions and 767 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -12,7 +12,7 @@ from PyQt5.QtWidgets import (QApplication, QMainWindow, QMenuBar, QMenu, QAction
QDockWidget, QTreeWidget, QListWidget, QWidget, QVBoxLayout, QTreeWidgetItem,
QLabel, QLineEdit, QFormLayout, QDoubleSpinBox, QScrollArea,
QFileSystemModel, QButtonGroup, QToolButton, QPushButton, QHBoxLayout,
QComboBox, QGroupBox, QInputDialog, QFileDialog, QMessageBox, QDesktopWidget)
QComboBox, QGroupBox, QInputDialog, QFileDialog, QMessageBox, QDesktopWidget, QGridLayout)
from PyQt5.QtCore import Qt, QDir, QTimer
from ui.widgets import CustomPanda3DWidget, CustomFileView, CustomTreeWidget
@ -24,8 +24,8 @@ class MainWindow(QMainWindow):
self.world = world
self.setupCenterWidget() # 创建中间部分Panda3D
self.setupMenus() # 创建菜单栏
self.setupDockWindows()
self.setupToolbar()
self.setupDockWindows() # 可停靠窗口
self.setupToolbar() # 工具栏
self.connectEvents()
# 移动窗口到屏幕中央
@ -126,12 +126,12 @@ class MainWindow(QMainWindow):
self.leftDock = QDockWidget("层级", self)
self.leftDock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
self.treeWidget = CustomTreeWidget(self.world)
self.treeWidget.setHeaderLabel("场景")
self.world.setTreeWidget(self.treeWidget) # 设置树形控件引用
self.leftDock.setWidget(self.treeWidget)
self.leftDock.setMinimumWidth(300)
self.addDockWidget(Qt.LeftDockWidgetArea, self.leftDock)
# self.leftDock.setMinimumWidth(300)
self.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.leftDock)
# 创建右侧停靠窗口(属性窗口)
self.rightDock = QDockWidget("属性", self)
self.rightDock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
@ -139,13 +139,15 @@ class MainWindow(QMainWindow):
# 创建属性面板的主容器和布局
self.propertyContainer = QWidget()
self.propertyContainer.setObjectName("PropertyContainer")
self.propertyLayout = QFormLayout(self.propertyContainer)
self.propertyLayout = QVBoxLayout(self.propertyContainer)
# self.propertyLayout = QFormLayout(self.propertyContainer)
# 添加初始提示信息
tipLabel = QLabel("")
tipLabel.setStyleSheet("color: gray;") # 使用灰色字体
self.propertyLayout.addRow(tipLabel)
# self.propertyLayout.addRow(tipLabel)
self.propertyLayout.addWidget(tipLabel)
# 创建滚动区域并设置属性
self.scrollArea = QScrollArea()
self.scrollArea.setWidgetResizable(True)
@ -158,7 +160,8 @@ class MainWindow(QMainWindow):
# 设置属性面板到世界对象
self.world.setPropertyLayout(self.propertyLayout)
# 创建脚本管理停靠窗口
self.scriptDock = QDockWidget("脚本管理", self)
self.scriptDock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
@ -167,7 +170,8 @@ class MainWindow(QMainWindow):
# 将右侧停靠窗口设为标签形式
self.tabifyDockWidget(self.rightDock, self.scriptDock)
# 创建底部停靠窗口(资源窗口)
self.bottomDock = QDockWidget("资源", self)
self.bottomDock.setAllowedAreas(Qt.BottomDockWidgetArea)

File diff suppressed because it is too large Load Diff

View File

@ -10,10 +10,10 @@
import os
import re
from PyQt5.QtWidgets import (QDialog, QVBoxLayout, QGroupBox, QHBoxLayout,
QLineEdit, QPushButton, QLabel, QDialogButtonBox,
QTreeView, QTreeWidget, QTreeWidgetItem, QWidget,
QFileDialog, QMessageBox)
from PyQt5.QtWidgets import (QDialog, QVBoxLayout, QGroupBox, QHBoxLayout,
QLineEdit, QPushButton, QLabel, QDialogButtonBox,
QTreeView, QTreeWidget, QTreeWidgetItem, QWidget,
QFileDialog, QMessageBox, QAbstractItemView)
from PyQt5.QtCore import Qt, QUrl
from PyQt5.QtGui import QDrag, QPainter, QPixmap
from PyQt5.sip import wrapinstance
@ -310,10 +310,28 @@ class CustomTreeWidget(QTreeWidget):
parent = wrapinstance(0, QWidget)
super().__init__(parent)
self.world = world
self.setupUI() # 初始化界面
self.setupDragDrop() # 设置拖拽功能
self.setDragDropMode(QTreeWidget.InternalMove)
def setupUI(self):
"""初始化UI设置"""
self.setHeaderHidden(True)
# 启用多选和拖拽
self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection)
self.setDropIndicatorShown(True)
def setupDragDrop(self):
"""设置拖拽功能"""
# 使用自定义拖拽模式
self.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove) # 或者使用 DragDrop
self.setDefaultDropAction(Qt.DropAction.MoveAction)
self.setDragEnabled(True)
self.setAcceptDrops(True)
self.setDragDropMode(QTreeWidget.InternalMove)
def dropEvent(self, event):
"""处理拖放事件"""
# 获取拖动的项和目标项