From e00e77a16a92d3d222a021bf7d2d88fbfdb56b1d Mon Sep 17 00:00:00 2001 From: yw1573 Date: Tue, 28 Jul 2026 09:54:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(gui,cli):=20=E5=BC=B9=E5=B0=84=E5=90=8E?= =?UTF-8?q?=E7=AD=89=E5=BE=85=E5=A2=9E=E5=8A=A0=E5=BC=80=E5=85=B3=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=EF=BC=8C=E7=89=88=E6=9C=AC=E5=8D=87=E8=87=B30.6.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GUI: 弹射后等待改为勾选框+微调框模式,与热床降温统一 - CLI: 新增 --no-eject-wait 参数跳过弹射等待 - 不勾选时 wait_after_eject_seconds=0,build_swap_block 跳过 G4 - __init__.py: 版本号 0.5.0 → 0.6.0 --- a1_swap_mod_packer/__init__.py | 2 +- a1_swap_mod_packer/cli.py | 3 ++- a1_swap_mod_packer/gui.py | 17 ++++++++++++++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/a1_swap_mod_packer/__init__.py b/a1_swap_mod_packer/__init__.py index 9e50b54..e8453b7 100644 --- a/a1_swap_mod_packer/__init__.py +++ b/a1_swap_mod_packer/__init__.py @@ -6,6 +6,6 @@ # 应用程序显示名称 APP_NAME = "A1 Swap Mod Packer" # 语义化版本号 -__version__ = "0.5.0" +__version__ = "0.6.0" # 窗口标题:应用名称 + 版本号 APP_TITLE = f"{APP_NAME} v{__version__}" diff --git a/a1_swap_mod_packer/cli.py b/a1_swap_mod_packer/cli.py index 419f801..47ac91f 100644 --- a/a1_swap_mod_packer/cli.py +++ b/a1_swap_mod_packer/cli.py @@ -70,7 +70,7 @@ def build_command(args: argparse.Namespace) -> int: swap_gcode=args.swap_gcode, output_3mf=Path(args.output), cool_bed_temp=cool_bed_temp, - wait_after_eject_seconds=args.wait, + wait_after_eject_seconds=0 if args.no_eject_wait else args.wait, show_plate_number=args.show_plate_number, swap_after_final=not args.no_swap_after_final, metadata_mode=args.metadata_mode, @@ -147,6 +147,7 @@ def create_parser() -> argparse.ArgumentParser: build.add_argument("--no-bed-cooldown", action="store_true", help="不在换料代码前插入 M190。") # 时间与编号 build.add_argument("--wait", type=int, default=45, help="板弹射后等待的秒数。") + build.add_argument("--no-eject-wait", action="store_true", help="不插入弹射后等待指令 G4。") build.add_argument("--show-plate-number", action="store_true", help="每板号向 M73 R 值增加 100 小时。") # 行为开关 build.add_argument("--no-swap-after-final", action="store_true", help="最后一块板后不执行换料 G-code。") diff --git a/a1_swap_mod_packer/gui.py b/a1_swap_mod_packer/gui.py index a2fd416..442c629 100644 --- a/a1_swap_mod_packer/gui.py +++ b/a1_swap_mod_packer/gui.py @@ -523,12 +523,18 @@ class MainWindow(QMainWindow): bed_row.addWidget(QLabel("°C")) bed_row.addStretch(1) - # 弹射后等待时间 + # 弹射后等待时间(勾选后启用,不勾选则不插入等待指令) + self.eject_wait_check = QCheckBox("弹射后等待") + self.eject_wait_check.setChecked(True) self.wait_spin = QSpinBox() self.wait_spin.setRange(0, 3600) self.wait_spin.setValue(45) self.wait_spin.setSuffix(" 秒") self.wait_spin.setFixedWidth(96) + eject_wait_row = QHBoxLayout() + eject_wait_row.addWidget(self.eject_wait_check) + eject_wait_row.addWidget(self.wait_spin) + eject_wait_row.addStretch(1) # 剩余时间板号显示 self.show_plate_number_check = QCheckBox("在剩余时间的百位显示当前板号") @@ -592,7 +598,7 @@ class MainWindow(QMainWindow): # 第 2 行:弹射后等待 | 剩余时间板号 grid.addWidget(QLabel("弹射后等待时间"), 2, 0) - grid.addWidget(self.wait_spin, 2, 1) + grid.addLayout(eject_wait_row, 2, 1) grid.addWidget(QLabel("剩余时间板号"), 2, 2) grid.addWidget(self.show_plate_number_check, 2, 3) @@ -700,6 +706,8 @@ class MainWindow(QMainWindow): self.default_copies_spin.valueChanged.connect(self.save_current_settings) self.bed_cooldown_check.stateChanged.connect(self.save_current_settings) self.cool_bed_spin.valueChanged.connect(self.save_current_settings) + self.eject_wait_check.stateChanged.connect(self.save_current_settings) + self.eject_wait_check.toggled.connect(self.wait_spin.setEnabled) self.wait_spin.valueChanged.connect(self.save_current_settings) self.show_plate_number_check.stateChanged.connect(self.save_current_settings) self.swap_final_check.stateChanged.connect(self.save_current_settings) @@ -720,6 +728,7 @@ class MainWindow(QMainWindow): self.default_copies_spin.setValue(int(options.get("default_copies", 1))) self.bed_cooldown_check.setChecked(bool(options.get("bed_cooldown_enabled", True))) self.cool_bed_spin.setValue(int(options.get("cool_bed_temp", 45))) + self.eject_wait_check.setChecked(bool(options.get("eject_wait_enabled", True))) self.wait_spin.setValue(int(options.get("wait_after_eject_seconds", 45))) self.show_plate_number_check.setChecked(bool(options.get("show_plate_number", True))) self.swap_final_check.setChecked(bool(options.get("swap_after_final", True))) @@ -755,6 +764,7 @@ class MainWindow(QMainWindow): "default_copies": self.default_copies_spin.value(), "bed_cooldown_enabled": self.bed_cooldown_check.isChecked(), "cool_bed_temp": self.cool_bed_spin.value(), + "eject_wait_enabled": self.eject_wait_check.isChecked(), "wait_after_eject_seconds": self.wait_spin.value(), "show_plate_number": self.show_plate_number_check.isChecked(), "swap_after_final": self.swap_final_check.isChecked(), @@ -1303,11 +1313,12 @@ class MainWindow(QMainWindow): if not swap_gcode_path: raise ValueError("请在 swap_gcode 文件夹中放入至少一个换料 G-code 文件并选择它。") cool_bed_temp = self.cool_bed_spin.value() if self.bed_cooldown_check.isChecked() else None + eject_wait_seconds = self.wait_spin.value() if self.eject_wait_check.isChecked() else 0 return BuildOptions( swap_gcode=Path(swap_gcode_path), output_3mf=output_path, cool_bed_temp=cool_bed_temp, - wait_after_eject_seconds=self.wait_spin.value(), + wait_after_eject_seconds=eject_wait_seconds, show_plate_number=self.show_plate_number_check.isChecked(), swap_after_final=self.swap_final_check.isChecked(), metadata_mode=self.metadata_combo.currentData(),