This commit is contained in:
2025-05-05 22:23:25 +08:00
parent 7a9c76ccef
commit dd54de1bfa
4 changed files with 196 additions and 135 deletions

View File

@@ -88,49 +88,42 @@ class ToolbarUI(ui_utils.BaseUI):
self.controls["toolbar_frame"].setFrameShadow(QtWidgets.QFrame.Raised)
# 创建工具栏按钮
# 第一行按钮
self.buttons["new_file"] = self._create_tool_button("新建文件", ":/icons/new_file.png")
self.buttons["open_file"] = self._create_tool_button("打开文件", ":/icons/open_file.png")
self.buttons["link_file"] = self._create_tool_button("链接文件", ":/icons/link_file.png")
self.buttons["unlink_file"] = self._create_tool_button("取消链接", ":/icons/unlink_file.png")
self.buttons["import_file"] = self._create_tool_button("导入文件", ":/icons/import_file.png")
self.buttons["export_file"] = self._create_tool_button("导出文件", ":/icons/export_file.png")
self.buttons["save_file"] = self._create_tool_button("保存文件", ":/icons/save_file.png")
self.buttons["user_info"] = self._create_tool_button("用户信息", ":/icons/user_info.png")
self.buttons["help"] = self._create_tool_button("帮助", ":/icons/help.png")
self.buttons["settings"] = self._create_tool_button("设置", ":/icons/settings.png")
self.buttons["print"] = self._create_tool_button("打印", ":/icons/print.png")
# DNA相关按钮
self.buttons["Save DNA"] = self._create_tool_button("保存DNA", "save.png")
self.buttons["Open DNA"] = self._create_tool_button("打开DNA", "open.png")
# 第二行按钮和下拉框
self.buttons["model_view"] = self._create_tool_button("模型视图", ":/icons/model_view.png", checkable=True)
self.buttons["model_view"].setChecked(True)
self.buttons["definition_view"] = self._create_tool_button("定义视图", ":/icons/definition_view.png", checkable=True)
self.buttons["table_view"] = self._create_tool_button("表格视图", ":/icons/table_view.png", checkable=True)
self.buttons["define_view"] = self._create_tool_button("自定义视图", ":/icons/define_view.png", checkable=True)
# RL4节点相关按钮
self.buttons["Create RL4 node"] = self._create_tool_button("创建RL4节点", "create_rl4_node.png")
self.buttons["Delete RL4 node"] = self._create_tool_button("删除RL4节点", "delete_rl4_node.png")
# 下拉框
self.controls["model_combo"] = QtWidgets.QComboBox()
self.controls["model_combo"].setObjectName("modelCombo")
self.controls["model_combo"].addItem("MetaHuman")
self.controls["model_combo"].setMinimumWidth(120)
# 蒙皮相关按钮
self.buttons["Import skin"] = self._create_tool_button("导入蒙皮", "import_skin.png")
self.buttons["Export skin"] = self._create_tool_button("导出蒙皮", "export_skin.png")
self.buttons["Copy skin"] = self._create_tool_button("复制蒙皮", "copy_skin.png")
# 帮助按钮
self.buttons["help_button"] = QtWidgets.QPushButton()
self.buttons["help_button"].setIcon(QtGui.QIcon(":/icons/question.png"))
self.buttons["help_button"].setObjectName("helpButton")
self.buttons["help_button"].setFixedSize(24, 24)
self.buttons["help_button"].setToolTip(LANG.get("help_tooltip", "帮助"))
self.buttons["Help"] = self._create_tool_button("帮助", "help.png")
def _create_tool_button(self, tooltip, icon_path, checkable=False):
def _create_tool_button(self, tooltip, icon_name, checkable=False):
"""
创建工具栏按钮
参数:
tooltip: 按钮提示文字
icon_name: 图标文件名,不包含路径
checkable: 是否可选中
"""
button = QtWidgets.QPushButton()
button.setToolTip(LANG.get(tooltip, tooltip))
# 尝试设置图标,如果图标文件不存在则使用文字
if os.path.exists(icon_path.replace(":/icons/", f"{ICONS_PATH}/")):
# 构建图标完整路径
icon_path = os.path.join(ICONS_PATH, icon_name)
# 尝试设置图标,如果图标文件存在
if os.path.exists(icon_path):
button.setIcon(QtGui.QIcon(icon_path))
button.setIconSize(QtCore.QSize(24, 24))
else:
# 如果图标不存在,使用文字
button.setText(LANG.get(tooltip, tooltip))
button.setObjectName(f"{tooltip.replace(' ', '_').lower()}_button")
@@ -157,40 +150,48 @@ class ToolbarUI(ui_utils.BaseUI):
self.layouts["toolbar_layout"].setContentsMargins(5, 5, 5, 5)
self.layouts["toolbar_layout"].setSpacing(2)
# 第一行按钮布局
self.layouts["toolbar_row1"] = QtWidgets.QHBoxLayout()
self.layouts["toolbar_row1"].setSpacing(2)
self.layouts["toolbar_row1"].addWidget(self.buttons["new_file"])
self.layouts["toolbar_row1"].addWidget(self.buttons["open_file"])
self.layouts["toolbar_row1"].addWidget(self.buttons["link_file"])
self.layouts["toolbar_row1"].addWidget(self.buttons["unlink_file"])
self.layouts["toolbar_row1"].addWidget(self._create_separator())
self.layouts["toolbar_row1"].addWidget(self.buttons["import_file"])
self.layouts["toolbar_row1"].addWidget(self.buttons["export_file"])
self.layouts["toolbar_row1"].addWidget(self.buttons["save_file"])
self.layouts["toolbar_row1"].addWidget(self._create_separator())
self.layouts["toolbar_row1"].addWidget(self.buttons["user_info"])
self.layouts["toolbar_row1"].addWidget(self.buttons["help"])
self.layouts["toolbar_row1"].addWidget(self.buttons["settings"])
self.layouts["toolbar_row1"].addWidget(self.buttons["print"])
self.layouts["toolbar_row1"].addStretch()
# 第二行按钮布局
self.layouts["toolbar_row2"] = QtWidgets.QHBoxLayout()
self.layouts["toolbar_row2"].setSpacing(2)
self.layouts["toolbar_row2"].addWidget(self.buttons["model_view"])
self.layouts["toolbar_row2"].addWidget(self.buttons["definition_view"])
self.layouts["toolbar_row2"].addWidget(self.buttons["table_view"])
self.layouts["toolbar_row2"].addWidget(self.buttons["define_view"])
self.layouts["toolbar_row2"].addWidget(self._create_separator())
self.layouts["toolbar_row2"].addWidget(self.controls["model_combo"])
self.layouts["toolbar_row2"].addStretch()
self.layouts["toolbar_row2"].addWidget(self.buttons["help_button"])
# 按钮布局
self.layouts["toolbar"] = QtWidgets.QHBoxLayout()
self.layouts["toolbar"].setSpacing(2)
self.layouts["toolbar"].addWidget(self.buttons["Save DNA"])
self.layouts["toolbar"].addWidget(self.buttons["Open DNA"])
self.layouts["toolbar"].addWidget(self._create_separator())
self.layouts["toolbar"].addWidget(self.buttons["Create RL4 node"])
self.layouts["toolbar"].addWidget(self.buttons["Delete RL4 node"])
self.layouts["toolbar"].addWidget(self._create_separator())
self.layouts["toolbar"].addWidget(self.buttons["Import skin"])
self.layouts["toolbar"].addWidget(self.buttons["Export skin"])
self.layouts["toolbar"].addWidget(self.buttons["Copy skin"])
self.layouts["toolbar"].addWidget(self._create_separator())
self.layouts["toolbar"].addWidget(self.buttons["Help"])
self.layouts["toolbar"].addStretch()
# 添加行到工具栏布局
self.layouts["toolbar_layout"].addLayout(self.layouts["toolbar_row1"])
self.layouts["toolbar_layout"].addLayout(self.layouts["toolbar_row2"])
self.layouts["toolbar_layout"].addLayout(self.layouts["toolbar"])
#======================================= CONNECTION =====================================
def create_connections(self):
"""
连接信号和槽
设置UI控件的交互行为
"""
# DNA相关按钮连接
self.buttons["Save DNA"].clicked.connect(utils_toolbar.save_dna)
self.buttons["Open DNA"].clicked.connect(utils_toolbar.open_dna)
# RL4节点相关按钮连接
self.buttons["Create RL4 node"].clicked.connect(utils_toolbar.create_rl4_node)
self.buttons["Delete RL4 node"].clicked.connect(utils_toolbar.delete_rl4_node)
# 蒙皮相关按钮连接
self.buttons["Import skin"].clicked.connect(utils_toolbar.import_skin)
self.buttons["Export skin"].clicked.connect(utils_toolbar.export_skin)
self.buttons["Copy skin"].clicked.connect(utils_toolbar.copy_skin)
# 帮助按钮连接
self.buttons["Help"].clicked.connect(utils_toolbar.show_help)
#======================================== FUNCTIONS ======================================
def _create_separator(self):
"""
创建分隔线
@@ -202,34 +203,4 @@ class ToolbarUI(ui_utils.BaseUI):
separator.setFixedHeight(24)
return separator
#======================================= CONNECTION =====================================
def create_connections(self):
"""
连接信号和槽
设置UI控件的交互行为
"""
# 第一行按钮连接
self.buttons["new_file"].clicked.connect(utils_toolbar.new_file)
self.buttons["open_file"].clicked.connect(utils_toolbar.open_file)
self.buttons["link_file"].clicked.connect(utils_toolbar.link_file)
self.buttons["unlink_file"].clicked.connect(utils_toolbar.unlink_file)
self.buttons["import_file"].clicked.connect(utils_toolbar.import_file)
self.buttons["export_file"].clicked.connect(utils_toolbar.export_file)
self.buttons["save_file"].clicked.connect(utils_toolbar.save_file)
self.buttons["user_info"].clicked.connect(utils_toolbar.show_user_info)
self.buttons["help"].clicked.connect(utils_toolbar.show_help)
self.buttons["settings"].clicked.connect(utils_toolbar.show_settings)
self.buttons["print"].clicked.connect(utils_toolbar.print_file)
# 第二行按钮连接
self.buttons["model_view"].clicked.connect(lambda: utils_toolbar.change_view("model"))
self.buttons["definition_view"].clicked.connect(lambda: utils_toolbar.change_view("definition"))
self.buttons["table_view"].clicked.connect(lambda: utils_toolbar.change_view("table"))
self.buttons["define_view"].clicked.connect(lambda: utils_toolbar.change_view("define"))
# 下拉框连接
self.controls["model_combo"].currentIndexChanged.connect(utils_toolbar.model_changed)
# 帮助按钮连接
self.buttons["help_button"].clicked.connect(utils_toolbar.show_help)