T-584 AI生成提示词区重排

This commit is contained in:
chengma
2026-07-10 11:53:51 +08:00
parent bbd5427748
commit da68f92aa6
5 changed files with 253 additions and 22 deletions
+168 -6
View File
@@ -751,6 +751,7 @@ class GenerateTab(QWidget):
status_callback=None,
title_prompt_path=None,
cover_prompts_dir=None,
title_templates_dir=None,
open_accounts_callback=None,
):
super().__init__(parent)
@@ -765,7 +766,13 @@ class GenerateTab(QWidget):
self.open_accounts_callback = open_accounts_callback
self.title_prompt_path = title_prompt_path or appconfig.title_prompt_path(self.config)
self.cover_prompts_dir = cover_prompts_dir or appconfig.cover_prompts_dir(self.config)
prompts.ensure_default_prompts(self.title_prompt_path, self.cover_prompts_dir)
self.title_templates_dir = title_templates_dir or appconfig.title_templates_dir(self.config)
prompts.ensure_default_prompts(
self.title_prompt_path,
self.cover_prompts_dir,
self.title_templates_dir,
)
self.current_title_template = None
self.current_cover_template = None
self.generate_worker = None
self.generate_thread = None
@@ -781,7 +788,27 @@ class GenerateTab(QWidget):
self.title_prompt_edit.setPlainText(
prompts.load_title_prompt(self.title_prompt_path)
)
self.title_template_combo = QComboBox()
self.title_template_combo.setObjectName("titleTemplateCombo")
self.title_template_combo.setToolTip("选择标题提示词模板并载入到输入框")
self.new_title_template_button = QPushButton("新建")
self.new_title_template_button.setObjectName("newTitleTemplateButton")
self.new_title_template_button.setToolTip("新建一个标题提示词模板")
self.save_title_template_button = QPushButton("保存模板")
self.save_title_template_button.setObjectName("saveTitleTemplateButton")
self.save_title_template_button.setToolTip("保存当前选中的标题提示词模板;未选中模板时会另存为新模板")
self.title_template_actions_button = QPushButton("模板操作")
self.title_template_actions_button.setObjectName("titleTemplateActionsButton")
self.title_template_actions_menu = QMenu(self)
self.save_title_template_as_action = self.title_template_actions_menu.addAction("另存为")
self.save_title_template_as_action.setObjectName("saveTitleTemplateAsAction")
self.rename_title_template_action = self.title_template_actions_menu.addAction("重命名")
self.rename_title_template_action.setObjectName("renameTitleTemplateAction")
self.delete_title_template_action = self.title_template_actions_menu.addAction("删除")
self.delete_title_template_action.setObjectName("deleteTitleTemplateAction")
self.title_template_actions_button.setMenu(self.title_template_actions_menu)
self.save_title_button = QPushButton("保存标题提示词")
self.save_title_button.setToolTip("保存当前标题提示词工作文本,生成时会使用这份内容")
self.insert_old_title_button = QPushButton("插入旧标题")
self.insert_old_title_button.setObjectName("insertOldTitleButton")
self.cover_prompt_edit = QPlainTextEdit()
@@ -790,7 +817,8 @@ class GenerateTab(QWidget):
self.cover_template_combo = QComboBox()
self.cover_template_combo.setObjectName("coverTemplateCombo")
self.new_cover_template_button = QPushButton("新建")
self.save_cover_template_button = QPushButton("保存")
self.save_cover_template_button = QPushButton("保存模板")
self.save_cover_template_button.setToolTip("保存当前选中的封面提示词模板;未选中模板时会另存为新模板")
self.cover_template_actions_button = QPushButton("模板操作")
self.cover_template_actions_button.setObjectName("coverTemplateActionsButton")
self.cover_template_actions_menu = QMenu(self)
@@ -851,19 +879,24 @@ class GenerateTab(QWidget):
left_layout = QVBoxLayout(left_panel)
left_layout.setContentsMargins(0, 0, 12, 0)
left_layout.addWidget(QLabel("标题提示词"))
left_layout.addWidget(self.title_prompt_edit, 1)
title_template_layout = QHBoxLayout()
title_template_layout.addWidget(self.title_template_combo, 1)
title_template_layout.addWidget(self.new_title_template_button)
title_template_layout.addWidget(self.save_title_template_button)
title_template_layout.addWidget(self.title_template_actions_button)
left_layout.addLayout(title_template_layout)
left_layout.addWidget(self.title_prompt_edit, 2)
title_action_layout = QHBoxLayout()
title_action_layout.addWidget(self.save_title_button)
title_action_layout.addWidget(self.insert_old_title_button)
title_action_layout.addWidget(self.save_title_button)
title_action_layout.addStretch(1)
left_layout.addLayout(title_action_layout)
left_layout.addWidget(QLabel("封面提示词"))
left_layout.addWidget(self.cover_template_combo)
cover_template_layout = QHBoxLayout()
cover_template_layout.addWidget(self.cover_template_combo, 1)
cover_template_layout.addWidget(self.new_cover_template_button)
cover_template_layout.addWidget(self.save_cover_template_button)
cover_template_layout.addWidget(self.cover_template_actions_button)
cover_template_layout.addStretch(1)
left_layout.addLayout(cover_template_layout)
left_layout.addWidget(self.cover_prompt_edit, 2)
cover_action_layout = QHBoxLayout()
@@ -981,6 +1014,12 @@ class GenerateTab(QWidget):
self.status_filter.currentIndexChanged.connect(self.refresh_tasks)
self.refresh_button.clicked.connect(self.refresh_tasks)
self.open_image_dir_button.clicked.connect(self.open_image_directory)
self.title_template_combo.currentIndexChanged.connect(self.load_selected_title_template)
self.new_title_template_button.clicked.connect(self.new_title_template)
self.save_title_template_button.clicked.connect(self.save_title_template)
self.save_title_template_as_action.triggered.connect(self.save_title_template_as)
self.rename_title_template_action.triggered.connect(self.rename_title_template)
self.delete_title_template_action.triggered.connect(self.delete_title_template)
self.save_title_button.clicked.connect(self.save_title_prompt)
self.insert_old_title_button.clicked.connect(self.insert_old_title_placeholder)
self.cover_template_combo.currentIndexChanged.connect(self.load_selected_cover_template)
@@ -997,6 +1036,7 @@ class GenerateTab(QWidget):
self.reset_generate_button.clicked.connect(self.reset_generated_result)
self.task_table.doubleClicked.connect(self.show_task_images)
self.refresh_title_templates()
self.refresh_cover_templates()
self.refresh_tasks()
self._show_current_run_log_empty()
@@ -1224,6 +1264,120 @@ class GenerateTab(QWidget):
return
self._set_status("标题提示词已保存")
def refresh_title_templates(self, selected=None):
try:
template_names = prompts.list_title_templates(self.title_templates_dir)
except Exception as exc:
template_names = []
self._show_prompt_error(exc)
current = selected if selected is not None else self.current_title_template
self.title_template_combo.blockSignals(True)
self.title_template_combo.clear()
self.title_template_combo.addItem("选择模板", None)
for name in template_names:
self.title_template_combo.addItem(name, name)
index = self.title_template_combo.findData(current)
if index >= 0:
self.title_template_combo.setCurrentIndex(index)
self.current_title_template = current
else:
self.title_template_combo.setCurrentIndex(0)
self.current_title_template = None
self.title_template_combo.blockSignals(False)
def load_selected_title_template(self, index=None):
name = self.title_template_combo.currentData()
self.current_title_template = name
if name is None:
return
try:
self.title_prompt_edit.setPlainText(
prompts.load_title_template(name, self.title_templates_dir)
)
except Exception as exc:
self._show_prompt_error(exc)
def new_title_template(self, checked=False):
name = self._ask_template_name("新建标题提示词模板")
if not name:
return
try:
prompts.save_title_template(name, "", self.title_templates_dir)
except Exception as exc:
self._show_prompt_error(exc)
return
self.refresh_title_templates(selected=name)
self.title_prompt_edit.setPlainText("")
self._set_status(f"标题提示词模板已新建:{name}")
def save_title_template(self, checked=False):
name = self.current_title_template
if name is None:
self.save_title_template_as()
return
try:
prompts.save_title_template(
name,
self.title_prompt_edit.toPlainText(),
self.title_templates_dir,
)
except Exception as exc:
self._show_prompt_error(exc)
return
self._set_status(f"标题提示词模板已保存:{name}")
def save_title_template_as(self, checked=False):
name = self._ask_template_name("另存标题提示词模板")
if not name:
return
try:
prompts.save_title_template(
name,
self.title_prompt_edit.toPlainText(),
self.title_templates_dir,
)
except Exception as exc:
self._show_prompt_error(exc)
return
self.refresh_title_templates(selected=name)
self._set_status(f"标题提示词模板已另存为:{name}")
def rename_title_template(self, checked=False):
old_name = self.current_title_template
if old_name is None:
self._set_status("没有可重命名的标题提示词模板")
return
new_name = self._ask_template_name("重命名标题提示词模板", text=old_name)
if not new_name or new_name == old_name:
return
try:
prompts.rename_title_template(old_name, new_name, self.title_templates_dir)
except Exception as exc:
self._show_prompt_error(exc)
return
self.refresh_title_templates(selected=new_name)
self._set_status(f"标题提示词模板已重命名:{new_name}")
def delete_title_template(self, checked=False):
name = self.current_title_template
if name is None:
self._set_status("没有可删除的标题提示词模板")
return
choice = QMessageBox.question(
self,
"删除标题提示词模板",
f"确定删除「{name}」吗?",
)
if choice != QMessageBox.Yes:
return
try:
prompts.delete_title_template(name, self.title_templates_dir)
except Exception as exc:
self._show_prompt_error(exc)
return
self.refresh_title_templates()
self._set_status(f"标题提示词模板已删除:{name}")
def refresh_cover_templates(self, selected=None):
try:
template_names = prompts.list_cover_templates(self.cover_prompts_dir)
@@ -1656,7 +1810,15 @@ class GenerateTab(QWidget):
self.shop_filter.setEnabled(not running)
self.item_filter.setEnabled(not running)
self.status_filter.setEnabled(not running)
self.title_template_combo.setEnabled(not running)
self.new_title_template_button.setEnabled(not running)
self.save_title_template_button.setEnabled(not running)
self.title_template_actions_button.setEnabled(not running)
self.save_title_template_as_action.setEnabled(not running)
self.rename_title_template_action.setEnabled(not running)
self.delete_title_template_action.setEnabled(not running)
self.save_title_button.setEnabled(not running)
self.cover_template_combo.setEnabled(not running)
self.new_cover_template_button.setEnabled(not running)
self.save_cover_template_button.setEnabled(not running)
self.cover_template_actions_button.setEnabled(not running)