From 9fb1388f774e7562864f27490975f7861e35a92e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 23 Jun 2026 01:36:54 +0000 Subject: [PATCH 01/14] Fix python script arguments --- src/script_chainer/win_exe/script_runner.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/script_chainer/win_exe/script_runner.py b/src/script_chainer/win_exe/script_runner.py index 94153ee..603c736 100644 --- a/src/script_chainer/win_exe/script_runner.py +++ b/src/script_chainer/win_exe/script_runner.py @@ -637,6 +637,8 @@ def _run_python_script( script_dir = script_file_abs.parent try: sys.argv = [script_path] + if script_config.script_arguments and script_config.script_arguments.strip(): + sys.argv.extend(shlex.split(script_config.script_arguments, posix=False)) sys.path.insert(0, str(script_dir)) os.chdir(script_dir) From 5a71245cc24d010b07b67c190d63e424df472cb9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 23 Jun 2026 15:02:12 +0000 Subject: [PATCH 02/14] Add UI to edit python script arguments --- .../gui/page/script_edit_interface.py | 15 +++++++++++++++ .../gui/page/script_setting_cards.py | 10 ++++++++++ .../gui/page/script_setting_interface.py | 1 + 3 files changed, 26 insertions(+) diff --git a/src/script_chainer/gui/page/script_edit_interface.py b/src/script_chainer/gui/page/script_edit_interface.py index 7c50e4f..cf2577e 100644 --- a/src/script_chainer/gui/page/script_edit_interface.py +++ b/src/script_chainer/gui/page/script_edit_interface.py @@ -39,6 +39,7 @@ GameProcessName, ScriptConfig, ScriptProcessName, + ScriptType, ) from script_chainer.utils.process_name_utils import normalize_process_names @@ -220,6 +221,19 @@ def get_content_widget(self) -> QWidget: self.init_by_config(self.config) return content_widget + def _update_visibility_by_type(self) -> None: + """根据脚本类型更新卡片的可见性""" + is_python = self.config.script_type == ScriptType.PYTHON + + self.script_path_opt.setVisible(not is_python) + self.launch_advanced_group.setVisible(not is_python) + self.game_process_name_opt.setVisible(not is_python) + self.run_timeout_seconds_opt.setVisible(not is_python) + self.check_done_opt.setVisible(not is_python) + self.kill_after_done_opt.setVisible(not is_python) + self.no_log_timeout_opt.setVisible(not is_python) + self.no_log_max_retries_opt.setVisible(not is_python) + def on_save_clicked(self) -> None: if not self.validate(): return @@ -285,6 +299,7 @@ def init_by_config(self, config: ScriptConfig): self.no_log_max_retries_input.setEnabled(no_log_enabled) self._sync_launch_method_ui() self._sync_launch_advanced_summary() + self._update_visibility_by_type() def eventFilter(self, watched: QObject, event: QEvent) -> bool: if watched is getattr(self, 'launcher_mode_switch', None): diff --git a/src/script_chainer/gui/page/script_setting_cards.py b/src/script_chainer/gui/page/script_setting_cards.py index 548b2bd..26223d2 100644 --- a/src/script_chainer/gui/page/script_setting_cards.py +++ b/src/script_chainer/gui/page/script_setting_cards.py @@ -195,6 +195,7 @@ class PythonScriptSettingCard(ScriptCardMixin, DraggableListItem): value_changed = Signal(ScriptConfig) deleted = Signal(int) attach_changed = Signal() + setting_requested = Signal(object) def __init__(self, config: ScriptConfig, chain_config: ScriptChainConfig, index: int = 0, parent=None, @@ -215,6 +216,10 @@ def __init__(self, config: ScriptConfig, chain_config: ScriptChainConfig, self.run_btn.setToolTip('调试运行') self.run_btn.clicked.connect(self.on_run_clicked) + self.setting_btn = TransparentToolButton(FluentIcon.SETTING, None) + self.setting_btn.setToolTip('设置') + self.setting_btn.clicked.connect(self.on_setting_clicked) + content_widget = MultiPushSettingCard( icon=FluentIcon.CODE, title=self._get_title(), @@ -223,6 +228,7 @@ def __init__(self, config: ScriptConfig, chain_config: ScriptChainConfig, self.attach_up_btn, self.attach_down_btn, self.run_btn, + self.setting_btn, self.edit_btn, self.delete_btn, self.enable_switch, @@ -311,6 +317,10 @@ def on_run_clicked(self) -> None: except Exception as e: show_error(self.window(), '启动失败', str(e)) + def on_setting_clicked(self) -> None: + """请求进入脚本设置二级界面。""" + self.setting_requested.emit(self) + def on_edit_clicked(self) -> None: """编辑 Python 脚本。外部脚本定位到文件,内部脚本弹窗编辑。""" path = self.config.script_path diff --git a/src/script_chainer/gui/page/script_setting_interface.py b/src/script_chainer/gui/page/script_setting_interface.py index 1fa5ad1..ea9933f 100644 --- a/src/script_chainer/gui/page/script_setting_interface.py +++ b/src/script_chainer/gui/page/script_setting_interface.py @@ -249,6 +249,7 @@ def update_chain_display(self) -> None: card = PythonScriptSettingCard( script_config, chain_config=self.chosen_config, index=i) card.attach_changed.connect(self._update_attach_margins) + card.setting_requested.connect(self.on_script_edit_requested) else: card = ScriptSettingCard( script_config, From 2dfd468449a57693be5fa91093c919ec12952cea Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 15:23:02 +0000 Subject: [PATCH 03/14] Revert "Add UI to edit python script arguments" This reverts commit 5a71245cc24d010b07b67c190d63e424df472cb9. --- .../gui/page/script_edit_interface.py | 15 --------------- .../gui/page/script_setting_cards.py | 10 ---------- .../gui/page/script_setting_interface.py | 1 - 3 files changed, 26 deletions(-) diff --git a/src/script_chainer/gui/page/script_edit_interface.py b/src/script_chainer/gui/page/script_edit_interface.py index cf2577e..7c50e4f 100644 --- a/src/script_chainer/gui/page/script_edit_interface.py +++ b/src/script_chainer/gui/page/script_edit_interface.py @@ -39,7 +39,6 @@ GameProcessName, ScriptConfig, ScriptProcessName, - ScriptType, ) from script_chainer.utils.process_name_utils import normalize_process_names @@ -221,19 +220,6 @@ def get_content_widget(self) -> QWidget: self.init_by_config(self.config) return content_widget - def _update_visibility_by_type(self) -> None: - """根据脚本类型更新卡片的可见性""" - is_python = self.config.script_type == ScriptType.PYTHON - - self.script_path_opt.setVisible(not is_python) - self.launch_advanced_group.setVisible(not is_python) - self.game_process_name_opt.setVisible(not is_python) - self.run_timeout_seconds_opt.setVisible(not is_python) - self.check_done_opt.setVisible(not is_python) - self.kill_after_done_opt.setVisible(not is_python) - self.no_log_timeout_opt.setVisible(not is_python) - self.no_log_max_retries_opt.setVisible(not is_python) - def on_save_clicked(self) -> None: if not self.validate(): return @@ -299,7 +285,6 @@ def init_by_config(self, config: ScriptConfig): self.no_log_max_retries_input.setEnabled(no_log_enabled) self._sync_launch_method_ui() self._sync_launch_advanced_summary() - self._update_visibility_by_type() def eventFilter(self, watched: QObject, event: QEvent) -> bool: if watched is getattr(self, 'launcher_mode_switch', None): diff --git a/src/script_chainer/gui/page/script_setting_cards.py b/src/script_chainer/gui/page/script_setting_cards.py index 26223d2..548b2bd 100644 --- a/src/script_chainer/gui/page/script_setting_cards.py +++ b/src/script_chainer/gui/page/script_setting_cards.py @@ -195,7 +195,6 @@ class PythonScriptSettingCard(ScriptCardMixin, DraggableListItem): value_changed = Signal(ScriptConfig) deleted = Signal(int) attach_changed = Signal() - setting_requested = Signal(object) def __init__(self, config: ScriptConfig, chain_config: ScriptChainConfig, index: int = 0, parent=None, @@ -216,10 +215,6 @@ def __init__(self, config: ScriptConfig, chain_config: ScriptChainConfig, self.run_btn.setToolTip('调试运行') self.run_btn.clicked.connect(self.on_run_clicked) - self.setting_btn = TransparentToolButton(FluentIcon.SETTING, None) - self.setting_btn.setToolTip('设置') - self.setting_btn.clicked.connect(self.on_setting_clicked) - content_widget = MultiPushSettingCard( icon=FluentIcon.CODE, title=self._get_title(), @@ -228,7 +223,6 @@ def __init__(self, config: ScriptConfig, chain_config: ScriptChainConfig, self.attach_up_btn, self.attach_down_btn, self.run_btn, - self.setting_btn, self.edit_btn, self.delete_btn, self.enable_switch, @@ -317,10 +311,6 @@ def on_run_clicked(self) -> None: except Exception as e: show_error(self.window(), '启动失败', str(e)) - def on_setting_clicked(self) -> None: - """请求进入脚本设置二级界面。""" - self.setting_requested.emit(self) - def on_edit_clicked(self) -> None: """编辑 Python 脚本。外部脚本定位到文件,内部脚本弹窗编辑。""" path = self.config.script_path diff --git a/src/script_chainer/gui/page/script_setting_interface.py b/src/script_chainer/gui/page/script_setting_interface.py index ea9933f..1fa5ad1 100644 --- a/src/script_chainer/gui/page/script_setting_interface.py +++ b/src/script_chainer/gui/page/script_setting_interface.py @@ -249,7 +249,6 @@ def update_chain_display(self) -> None: card = PythonScriptSettingCard( script_config, chain_config=self.chosen_config, index=i) card.attach_changed.connect(self._update_attach_margins) - card.setting_requested.connect(self.on_script_edit_requested) else: card = ScriptSettingCard( script_config, From d482b01a5caf8e055ae4ebb32706f33d6ffc57a0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 15:23:09 +0000 Subject: [PATCH 04/14] Add script_arguments input in PythonCodeEditorDialog --- .../setting_card/code_editor_setting_card.py | 18 +++++++++++++++++- .../gui/page/script_setting_cards.py | 3 +++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py index 421d55d..6b1b1b7 100644 --- a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py +++ b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py @@ -479,8 +479,9 @@ class PythonCodeEditorDialog(BaseCodeEditorDialog): """Python 代码编辑器弹窗""" def __init__(self, parent=None, title: str = "Python 脚本编辑器", - initial_code: str = "", script_path: str = ""): + initial_code: str = "", script_path: str = "", script_arguments: str = ""): self._script_path = script_path + self._script_arguments = script_arguments super().__init__(parent=parent, title=title, placeholder="# 输入 Python 脚本", initial_code=initial_code) @@ -496,7 +497,19 @@ def __init__(self, parent=None, title: str = "Python 脚本编辑器", self.buttonLayout.insertStretch(1) def _setup_editor_layout(self) -> None: + from qfluentwidgets import LineEdit self.highlighter = PythonHighlighter(self.editor.document()) + + args_layout = QHBoxLayout() + args_label = BodyLabel("启动参数: ") + self.args_input = LineEdit() + self.args_input.setPlaceholderText("请输入脚本启动参数 (例如: --a 1 --b 2)") + self.args_input.setText(self._script_arguments) + args_layout.addWidget(args_label) + args_layout.addWidget(self.args_input) + + self.viewLayout.addLayout(args_layout) + self.viewLayout.addSpacing(8) self.viewLayout.addWidget(self.editor) def _on_external_edit(self) -> None: @@ -512,6 +525,9 @@ def _on_external_edit(self) -> None: def get_code(self) -> str: return self.editor.toPlainText() + + def get_arguments(self) -> str: + return self.args_input.text() class JsonHighlighter(QSyntaxHighlighter): diff --git a/src/script_chainer/gui/page/script_setting_cards.py b/src/script_chainer/gui/page/script_setting_cards.py index 548b2bd..d27e897 100644 --- a/src/script_chainer/gui/page/script_setting_cards.py +++ b/src/script_chainer/gui/page/script_setting_cards.py @@ -329,9 +329,12 @@ def on_edit_clicked(self) -> None: title='Python 脚本', initial_code=code, script_path=path, + script_arguments=self.config.script_arguments ) if dialog.exec(): self.chain_config.save_python_script(self.config.idx, dialog.get_code()) + self.config.script_arguments = dialog.get_arguments() + self.value_changed.emit(self.config) self._update_display() def _update_display(self) -> None: From b5980dd2335b1ce914893c70f8135b06d4a182dc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 15:57:18 +0000 Subject: [PATCH 05/14] Update placeholder text and move import to top --- .../widgets/setting_card/code_editor_setting_card.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py index 6b1b1b7..a15aeee 100644 --- a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py +++ b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py @@ -15,6 +15,7 @@ BodyLabel, FluentIcon, FluentIconBase, + LineEdit, MessageBoxBase, PlainTextEdit, RoundMenu, @@ -497,17 +498,16 @@ def __init__(self, parent=None, title: str = "Python 脚本编辑器", self.buttonLayout.insertStretch(1) def _setup_editor_layout(self) -> None: - from qfluentwidgets import LineEdit self.highlighter = PythonHighlighter(self.editor.document()) args_layout = QHBoxLayout() args_label = BodyLabel("启动参数: ") self.args_input = LineEdit() - self.args_input.setPlaceholderText("请输入脚本启动参数 (例如: --a 1 --b 2)") + self.args_input.setPlaceholderText("请输入脚本启动参数") self.args_input.setText(self._script_arguments) args_layout.addWidget(args_label) args_layout.addWidget(self.args_input) - + self.viewLayout.addLayout(args_layout) self.viewLayout.addSpacing(8) self.viewLayout.addWidget(self.editor) @@ -525,7 +525,7 @@ def _on_external_edit(self) -> None: def get_code(self) -> str: return self.editor.toPlainText() - + def get_arguments(self) -> str: return self.args_input.text() From 5806848b5481d8671787db8d66fc4359495f529f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:05:58 +0000 Subject: [PATCH 06/14] docs: add necessary comments for python script arguments support --- .../setting_card/code_editor_setting_card.py | 13 +++++++++++++ src/script_chainer/config/script_config.py | 1 + .../gui/page/script_edit_interface.py | 1 + src/script_chainer/gui/page/script_setting_cards.py | 2 ++ src/script_chainer/win_exe/script_runner.py | 4 ++++ 5 files changed, 21 insertions(+) diff --git a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py index a15aeee..97ddf3a 100644 --- a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py +++ b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py @@ -481,6 +481,15 @@ class PythonCodeEditorDialog(BaseCodeEditorDialog): def __init__(self, parent=None, title: str = "Python 脚本编辑器", initial_code: str = "", script_path: str = "", script_arguments: str = ""): + """ + 初始化 Python 代码编辑器弹窗 + + :param parent: 父组件 + :param title: 弹窗标题 + :param initial_code: 初始显示的代码内容 + :param script_path: 脚本的本地路径(用于外部编辑功能) + :param script_arguments: 脚本的启动参数 + """ self._script_path = script_path self._script_arguments = script_arguments super().__init__(parent=parent, title=title, @@ -498,6 +507,7 @@ def __init__(self, parent=None, title: str = "Python 脚本编辑器", self.buttonLayout.insertStretch(1) def _setup_editor_layout(self) -> None: + """设置编辑器布局,包括启动参数输入框和代码编辑器""" self.highlighter = PythonHighlighter(self.editor.document()) args_layout = QHBoxLayout() @@ -513,6 +523,7 @@ def _setup_editor_layout(self) -> None: self.viewLayout.addWidget(self.editor) def _on_external_edit(self) -> None: + """处理点击“外部编辑”按钮的事件,将内容保存并用系统默认应用打开该脚本文件""" if not self._script_path: return # 先将编辑器内容保存到磁盘 @@ -524,9 +535,11 @@ def _on_external_edit(self) -> None: log.error('打开外部编辑器失败: %s', self._script_path) def get_code(self) -> str: + """获取编辑器中的 Python 代码""" return self.editor.toPlainText() def get_arguments(self) -> str: + """获取填写的 Python 脚本启动参数""" return self.args_input.text() diff --git a/src/script_chainer/config/script_config.py b/src/script_chainer/config/script_config.py index fd10e4f..c33ed60 100644 --- a/src/script_chainer/config/script_config.py +++ b/src/script_chainer/config/script_config.py @@ -148,6 +148,7 @@ class ScriptConfig: check_done: str = '' kill_script_after_done: bool = True kill_game_after_done: bool = True + # 外部脚本的启动参数 script_arguments: str = '' notify_start: bool = True notify_done: bool = True diff --git a/src/script_chainer/gui/page/script_edit_interface.py b/src/script_chainer/gui/page/script_edit_interface.py index 7c50e4f..418071d 100644 --- a/src/script_chainer/gui/page/script_edit_interface.py +++ b/src/script_chainer/gui/page/script_edit_interface.py @@ -148,6 +148,7 @@ def get_content_widget(self) -> QWidget: self.script_arguments_opt = TextSettingCard( icon=FluentIcon.COMMAND_PROMPT, title='脚本启动参数', + content='(选填)传递给 Python 脚本的命令行参数', ) self.script_arguments_opt.line_edit.setMinimumWidth(200) content_widget.add_widget(self.script_arguments_opt) diff --git a/src/script_chainer/gui/page/script_setting_cards.py b/src/script_chainer/gui/page/script_setting_cards.py index d27e897..0d99809 100644 --- a/src/script_chainer/gui/page/script_setting_cards.py +++ b/src/script_chainer/gui/page/script_setting_cards.py @@ -332,7 +332,9 @@ def on_edit_clicked(self) -> None: script_arguments=self.config.script_arguments ) if dialog.exec(): + # 保存编辑器中的代码 self.chain_config.save_python_script(self.config.idx, dialog.get_code()) + # 保存用户输入的脚本启动参数 self.config.script_arguments = dialog.get_arguments() self.value_changed.emit(self.config) self._update_display() diff --git a/src/script_chainer/win_exe/script_runner.py b/src/script_chainer/win_exe/script_runner.py index 603c736..c920865 100644 --- a/src/script_chainer/win_exe/script_runner.py +++ b/src/script_chainer/win_exe/script_runner.py @@ -636,10 +636,14 @@ def _run_python_script( script_path = str(script_file_abs) script_dir = script_file_abs.parent try: + # 重置 sys.argv 并填入脚本路径作为第一个参数 sys.argv = [script_path] + # 解析并添加可能存在的启动参数 if script_config.script_arguments and script_config.script_arguments.strip(): sys.argv.extend(shlex.split(script_config.script_arguments, posix=False)) + # 将脚本所在目录添加到系统路径以支持相对导入 sys.path.insert(0, str(script_dir)) + # 切换工作目录到脚本所在目录 os.chdir(script_dir) if log_notifier is not None: From df073c85c32437ac251c6eacad5fb81738867040 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:24:33 +0000 Subject: [PATCH 07/14] fix: remove unnecessary comments from code we didn't add --- patch_code_editor.py | 35 +++++++++++++++++++ patch_runner.py | 11 ++++++ patch_setting_cards.py | 9 +++++ .../setting_card/code_editor_setting_card.py | 12 ------- .../gui/page/script_setting_cards.py | 1 - src/script_chainer/win_exe/script_runner.py | 3 -- 6 files changed, 55 insertions(+), 16 deletions(-) create mode 100644 patch_code_editor.py create mode 100644 patch_runner.py create mode 100644 patch_setting_cards.py diff --git a/patch_code_editor.py b/patch_code_editor.py new file mode 100644 index 0000000..be91671 --- /dev/null +++ b/patch_code_editor.py @@ -0,0 +1,35 @@ +import re + +with open('src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py', 'r', encoding='utf-8') as f: + content = f.read() + +# Remove __init__ docstring +content = re.sub( + r' def __init__\(self, parent=None, title: str = "Python 脚本编辑器",\s+initial_code: str = "", script_path: str = "", script_arguments: str = ""\):\s+"""\s+初始化 Python 代码编辑器弹窗\s+:param parent: 父组件\s+:param title: 弹窗标题\s+:param initial_code: 初始显示的代码内容\s+:param script_path: 脚本的本地路径(用于外部编辑功能)\s+:param script_arguments: 脚本的启动参数\s+"""\s+', + ' def __init__(self, parent=None, title: str = "Python 脚本编辑器",\n initial_code: str = "", script_path: str = "", script_arguments: str = ""):\n ', + content +) + +# Remove _setup_editor_layout docstring +content = re.sub( + r' def _setup_editor_layout\(self\) -> None:\s+"""设置编辑器布局,包括启动参数输入框和代码编辑器"""\s+', + ' def _setup_editor_layout(self) -> None:\n ', + content +) + +# Remove _on_external_edit docstring +content = re.sub( + r' def _on_external_edit\(self\) -> None:\s+"""处理点击“外部编辑”按钮的事件,将内容保存并用系统默认应用打开该脚本文件"""\s+', + ' def _on_external_edit(self) -> None:\n ', + content +) + +# Remove get_code docstring +content = re.sub( + r' def get_code\(self\) -> str:\s+"""获取编辑器中的 Python 代码"""\s+', + ' def get_code(self) -> str:\n ', + content +) + +with open('src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py', 'w', encoding='utf-8') as f: + f.write(content) diff --git a/patch_runner.py b/patch_runner.py new file mode 100644 index 0000000..16c5f1d --- /dev/null +++ b/patch_runner.py @@ -0,0 +1,11 @@ +import re + +with open('src/script_chainer/win_exe/script_runner.py', 'r', encoding='utf-8') as f: + content = f.read() + +content = content.replace(' # 重置 sys.argv 并填入脚本路径作为第一个参数\n', '') +content = content.replace(' # 将脚本所在目录添加到系统路径以支持相对导入\n', '') +content = content.replace(' # 切换工作目录到脚本所在目录\n', '') + +with open('src/script_chainer/win_exe/script_runner.py', 'w', encoding='utf-8') as f: + f.write(content) diff --git a/patch_setting_cards.py b/patch_setting_cards.py new file mode 100644 index 0000000..3273abf --- /dev/null +++ b/patch_setting_cards.py @@ -0,0 +1,9 @@ +import re + +with open('src/script_chainer/gui/page/script_setting_cards.py', 'r', encoding='utf-8') as f: + content = f.read() + +content = content.replace(' # 保存编辑器中的代码\n', '') + +with open('src/script_chainer/gui/page/script_setting_cards.py', 'w', encoding='utf-8') as f: + f.write(content) diff --git a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py index 97ddf3a..dc7e3e3 100644 --- a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py +++ b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py @@ -481,15 +481,6 @@ class PythonCodeEditorDialog(BaseCodeEditorDialog): def __init__(self, parent=None, title: str = "Python 脚本编辑器", initial_code: str = "", script_path: str = "", script_arguments: str = ""): - """ - 初始化 Python 代码编辑器弹窗 - - :param parent: 父组件 - :param title: 弹窗标题 - :param initial_code: 初始显示的代码内容 - :param script_path: 脚本的本地路径(用于外部编辑功能) - :param script_arguments: 脚本的启动参数 - """ self._script_path = script_path self._script_arguments = script_arguments super().__init__(parent=parent, title=title, @@ -507,7 +498,6 @@ def __init__(self, parent=None, title: str = "Python 脚本编辑器", self.buttonLayout.insertStretch(1) def _setup_editor_layout(self) -> None: - """设置编辑器布局,包括启动参数输入框和代码编辑器""" self.highlighter = PythonHighlighter(self.editor.document()) args_layout = QHBoxLayout() @@ -523,7 +513,6 @@ def _setup_editor_layout(self) -> None: self.viewLayout.addWidget(self.editor) def _on_external_edit(self) -> None: - """处理点击“外部编辑”按钮的事件,将内容保存并用系统默认应用打开该脚本文件""" if not self._script_path: return # 先将编辑器内容保存到磁盘 @@ -535,7 +524,6 @@ def _on_external_edit(self) -> None: log.error('打开外部编辑器失败: %s', self._script_path) def get_code(self) -> str: - """获取编辑器中的 Python 代码""" return self.editor.toPlainText() def get_arguments(self) -> str: diff --git a/src/script_chainer/gui/page/script_setting_cards.py b/src/script_chainer/gui/page/script_setting_cards.py index 0d99809..fc77972 100644 --- a/src/script_chainer/gui/page/script_setting_cards.py +++ b/src/script_chainer/gui/page/script_setting_cards.py @@ -332,7 +332,6 @@ def on_edit_clicked(self) -> None: script_arguments=self.config.script_arguments ) if dialog.exec(): - # 保存编辑器中的代码 self.chain_config.save_python_script(self.config.idx, dialog.get_code()) # 保存用户输入的脚本启动参数 self.config.script_arguments = dialog.get_arguments() diff --git a/src/script_chainer/win_exe/script_runner.py b/src/script_chainer/win_exe/script_runner.py index c920865..36d7747 100644 --- a/src/script_chainer/win_exe/script_runner.py +++ b/src/script_chainer/win_exe/script_runner.py @@ -636,14 +636,11 @@ def _run_python_script( script_path = str(script_file_abs) script_dir = script_file_abs.parent try: - # 重置 sys.argv 并填入脚本路径作为第一个参数 sys.argv = [script_path] # 解析并添加可能存在的启动参数 if script_config.script_arguments and script_config.script_arguments.strip(): sys.argv.extend(shlex.split(script_config.script_arguments, posix=False)) - # 将脚本所在目录添加到系统路径以支持相对导入 sys.path.insert(0, str(script_dir)) - # 切换工作目录到脚本所在目录 os.chdir(script_dir) if log_notifier is not None: From 4d1b76f8a2b083035160f45213dca7d9cab0cf62 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:24:56 +0000 Subject: [PATCH 08/14] Apply remaining changes --- patch_code_editor.py | 35 ----------------------------------- patch_runner.py | 11 ----------- patch_setting_cards.py | 9 --------- 3 files changed, 55 deletions(-) delete mode 100644 patch_code_editor.py delete mode 100644 patch_runner.py delete mode 100644 patch_setting_cards.py diff --git a/patch_code_editor.py b/patch_code_editor.py deleted file mode 100644 index be91671..0000000 --- a/patch_code_editor.py +++ /dev/null @@ -1,35 +0,0 @@ -import re - -with open('src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py', 'r', encoding='utf-8') as f: - content = f.read() - -# Remove __init__ docstring -content = re.sub( - r' def __init__\(self, parent=None, title: str = "Python 脚本编辑器",\s+initial_code: str = "", script_path: str = "", script_arguments: str = ""\):\s+"""\s+初始化 Python 代码编辑器弹窗\s+:param parent: 父组件\s+:param title: 弹窗标题\s+:param initial_code: 初始显示的代码内容\s+:param script_path: 脚本的本地路径(用于外部编辑功能)\s+:param script_arguments: 脚本的启动参数\s+"""\s+', - ' def __init__(self, parent=None, title: str = "Python 脚本编辑器",\n initial_code: str = "", script_path: str = "", script_arguments: str = ""):\n ', - content -) - -# Remove _setup_editor_layout docstring -content = re.sub( - r' def _setup_editor_layout\(self\) -> None:\s+"""设置编辑器布局,包括启动参数输入框和代码编辑器"""\s+', - ' def _setup_editor_layout(self) -> None:\n ', - content -) - -# Remove _on_external_edit docstring -content = re.sub( - r' def _on_external_edit\(self\) -> None:\s+"""处理点击“外部编辑”按钮的事件,将内容保存并用系统默认应用打开该脚本文件"""\s+', - ' def _on_external_edit(self) -> None:\n ', - content -) - -# Remove get_code docstring -content = re.sub( - r' def get_code\(self\) -> str:\s+"""获取编辑器中的 Python 代码"""\s+', - ' def get_code(self) -> str:\n ', - content -) - -with open('src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py', 'w', encoding='utf-8') as f: - f.write(content) diff --git a/patch_runner.py b/patch_runner.py deleted file mode 100644 index 16c5f1d..0000000 --- a/patch_runner.py +++ /dev/null @@ -1,11 +0,0 @@ -import re - -with open('src/script_chainer/win_exe/script_runner.py', 'r', encoding='utf-8') as f: - content = f.read() - -content = content.replace(' # 重置 sys.argv 并填入脚本路径作为第一个参数\n', '') -content = content.replace(' # 将脚本所在目录添加到系统路径以支持相对导入\n', '') -content = content.replace(' # 切换工作目录到脚本所在目录\n', '') - -with open('src/script_chainer/win_exe/script_runner.py', 'w', encoding='utf-8') as f: - f.write(content) diff --git a/patch_setting_cards.py b/patch_setting_cards.py deleted file mode 100644 index 3273abf..0000000 --- a/patch_setting_cards.py +++ /dev/null @@ -1,9 +0,0 @@ -import re - -with open('src/script_chainer/gui/page/script_setting_cards.py', 'r', encoding='utf-8') as f: - content = f.read() - -content = content.replace(' # 保存编辑器中的代码\n', '') - -with open('src/script_chainer/gui/page/script_setting_cards.py', 'w', encoding='utf-8') as f: - f.write(content) From 2c49a21e221a4ae7992e139e1202c1d26b60d43f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:32:52 +0000 Subject: [PATCH 09/14] refactor: revert script_config.py and extract layout to _setup_arguments_layout --- .../widgets/setting_card/code_editor_setting_card.py | 5 ++++- src/script_chainer/config/script_config.py | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py index dc7e3e3..526c24b 100644 --- a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py +++ b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py @@ -500,6 +500,10 @@ def __init__(self, parent=None, title: str = "Python 脚本编辑器", def _setup_editor_layout(self) -> None: self.highlighter = PythonHighlighter(self.editor.document()) + self._setup_arguments_layout() + self.viewLayout.addWidget(self.editor) + + def _setup_arguments_layout(self) -> None: args_layout = QHBoxLayout() args_label = BodyLabel("启动参数: ") self.args_input = LineEdit() @@ -510,7 +514,6 @@ def _setup_editor_layout(self) -> None: self.viewLayout.addLayout(args_layout) self.viewLayout.addSpacing(8) - self.viewLayout.addWidget(self.editor) def _on_external_edit(self) -> None: if not self._script_path: diff --git a/src/script_chainer/config/script_config.py b/src/script_chainer/config/script_config.py index c33ed60..fd10e4f 100644 --- a/src/script_chainer/config/script_config.py +++ b/src/script_chainer/config/script_config.py @@ -148,7 +148,6 @@ class ScriptConfig: check_done: str = '' kill_script_after_done: bool = True kill_game_after_done: bool = True - # 外部脚本的启动参数 script_arguments: str = '' notify_start: bool = True notify_done: bool = True From bbf41cc292e1aae30028af3a99daa39259b7023a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:46:24 +0000 Subject: [PATCH 10/14] refactor: remove redundant param description and add concise layout comment --- .../widgets/setting_card/code_editor_setting_card.py | 1 + src/script_chainer/gui/page/script_edit_interface.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py index 526c24b..5835213 100644 --- a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py +++ b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py @@ -504,6 +504,7 @@ def _setup_editor_layout(self) -> None: self.viewLayout.addWidget(self.editor) def _setup_arguments_layout(self) -> None: + """设置启动参数的布局""" args_layout = QHBoxLayout() args_label = BodyLabel("启动参数: ") self.args_input = LineEdit() diff --git a/src/script_chainer/gui/page/script_edit_interface.py b/src/script_chainer/gui/page/script_edit_interface.py index 418071d..7c50e4f 100644 --- a/src/script_chainer/gui/page/script_edit_interface.py +++ b/src/script_chainer/gui/page/script_edit_interface.py @@ -148,7 +148,6 @@ def get_content_widget(self) -> QWidget: self.script_arguments_opt = TextSettingCard( icon=FluentIcon.COMMAND_PROMPT, title='脚本启动参数', - content='(选填)传递给 Python 脚本的命令行参数', ) self.script_arguments_opt.line_edit.setMinimumWidth(200) content_widget.add_widget(self.script_arguments_opt) From a67c378d5f4023f0a7aa589c9915d5ba3a96fa24 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:58:48 +0000 Subject: [PATCH 11/14] refactor: extract _get_args_list in script_runner.py --- src/script_chainer/win_exe/script_runner.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/script_chainer/win_exe/script_runner.py b/src/script_chainer/win_exe/script_runner.py index 36d7747..c56e5d6 100644 --- a/src/script_chainer/win_exe/script_runner.py +++ b/src/script_chainer/win_exe/script_runner.py @@ -198,6 +198,13 @@ def _on_stdout(line: str) -> None: return _on_stdout +def _get_args_list(script_config: ScriptConfig) -> list[str]: + """获取解析后的脚本启动参数列表""" + if script_config.script_arguments and script_config.script_arguments.strip(): + return shlex.split(script_config.script_arguments, posix=False) + return [] + + def _launch_script( script_config: ScriptConfig, target_process_infos: list[ProcessInfo] | None = None, @@ -222,9 +229,7 @@ def _launch_script( script_path = script_config.script_path # 解析启动参数 - args_list = None - if script_config.script_arguments and script_config.script_arguments.strip(): - args_list = shlex.split(script_config.script_arguments, posix=False) + args_list = _get_args_list(script_config) pm = ProcessManager() try: @@ -638,8 +643,7 @@ def _run_python_script( try: sys.argv = [script_path] # 解析并添加可能存在的启动参数 - if script_config.script_arguments and script_config.script_arguments.strip(): - sys.argv.extend(shlex.split(script_config.script_arguments, posix=False)) + sys.argv.extend(_get_args_list(script_config)) sys.path.insert(0, str(script_dir)) os.chdir(script_dir) From d887ca71b2b712be3459ca0f761e45661dddda55 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 17:02:17 +0000 Subject: [PATCH 12/14] Refactor _get_args_list to accept script_arguments string directly --- src/script_chainer/win_exe/script_runner.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/script_chainer/win_exe/script_runner.py b/src/script_chainer/win_exe/script_runner.py index c56e5d6..13373bc 100644 --- a/src/script_chainer/win_exe/script_runner.py +++ b/src/script_chainer/win_exe/script_runner.py @@ -198,10 +198,10 @@ def _on_stdout(line: str) -> None: return _on_stdout -def _get_args_list(script_config: ScriptConfig) -> list[str]: +def _get_args_list(script_arguments: str | None) -> list[str]: """获取解析后的脚本启动参数列表""" - if script_config.script_arguments and script_config.script_arguments.strip(): - return shlex.split(script_config.script_arguments, posix=False) + if script_arguments and script_arguments.strip(): + return shlex.split(script_arguments, posix=False) return [] @@ -229,7 +229,7 @@ def _launch_script( script_path = script_config.script_path # 解析启动参数 - args_list = _get_args_list(script_config) + args_list = _get_args_list(script_config.script_arguments) pm = ProcessManager() try: @@ -643,7 +643,7 @@ def _run_python_script( try: sys.argv = [script_path] # 解析并添加可能存在的启动参数 - sys.argv.extend(_get_args_list(script_config)) + sys.argv.extend(_get_args_list(script_config.script_arguments)) sys.path.insert(0, str(script_dir)) os.chdir(script_dir) From e68222965f2bd250a7557773a6d9417df7c79957 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 17:09:47 +0000 Subject: [PATCH 13/14] Change _get_args_list to return None if no args --- src/script_chainer/win_exe/script_runner.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/script_chainer/win_exe/script_runner.py b/src/script_chainer/win_exe/script_runner.py index 13373bc..4a986ec 100644 --- a/src/script_chainer/win_exe/script_runner.py +++ b/src/script_chainer/win_exe/script_runner.py @@ -198,11 +198,12 @@ def _on_stdout(line: str) -> None: return _on_stdout -def _get_args_list(script_arguments: str | None) -> list[str]: +def _get_args_list(script_arguments: str | None) -> list[str] | None: """获取解析后的脚本启动参数列表""" + args_list = None if script_arguments and script_arguments.strip(): - return shlex.split(script_arguments, posix=False) - return [] + args_list = shlex.split(script_arguments, posix=False) + return args_list def _launch_script( @@ -643,7 +644,9 @@ def _run_python_script( try: sys.argv = [script_path] # 解析并添加可能存在的启动参数 - sys.argv.extend(_get_args_list(script_config.script_arguments)) + args_list = _get_args_list(script_config.script_arguments) + if args_list: + sys.argv.extend(args_list) sys.path.insert(0, str(script_dir)) os.chdir(script_dir) From 9c61827e5c346e93f4c8328d5fb18007633f7f6b Mon Sep 17 00:00:00 2001 From: winsanyu <973530837@qq.com> Date: Thu, 25 Jun 2026 01:11:07 +0800 Subject: [PATCH 14/14] refine code --- .../widgets/setting_card/code_editor_setting_card.py | 2 +- src/script_chainer/gui/page/script_setting_cards.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py index 5835213..1382170 100644 --- a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py +++ b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py @@ -499,7 +499,7 @@ def __init__(self, parent=None, title: str = "Python 脚本编辑器", def _setup_editor_layout(self) -> None: self.highlighter = PythonHighlighter(self.editor.document()) - + # 设置启动参数 self._setup_arguments_layout() self.viewLayout.addWidget(self.editor) diff --git a/src/script_chainer/gui/page/script_setting_cards.py b/src/script_chainer/gui/page/script_setting_cards.py index fc77972..c1e1457 100644 --- a/src/script_chainer/gui/page/script_setting_cards.py +++ b/src/script_chainer/gui/page/script_setting_cards.py @@ -329,7 +329,7 @@ def on_edit_clicked(self) -> None: title='Python 脚本', initial_code=code, script_path=path, - script_arguments=self.config.script_arguments + script_arguments=self.config.script_arguments, ) if dialog.exec(): self.chain_config.save_python_script(self.config.idx, dialog.get_code())