feat(ai-outfit): two settings per row in the right column

Replace the one-per-row QFormLayout with a 2-column QGridLayout (3x2:
并发/间隔 · 冷却/重试 · 分辨率/质量), matching the mockup's 2-col 生成设置.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-22 09:53:15 +08:00
co-authored by Claude Opus 4.8
parent db28a39ebc
commit 11dd062f45
+26 -10
View File
@@ -16,6 +16,7 @@ from PySide6.QtWidgets import (
QComboBox, QComboBox,
QDoubleSpinBox, QDoubleSpinBox,
QFileDialog, QFileDialog,
QGridLayout,
QGroupBox, QGroupBox,
QHBoxLayout, QHBoxLayout,
QHeaderView, QHeaderView,
@@ -234,14 +235,12 @@ class AiOutfitPanel(QWidget):
return scroll return scroll
def _create_settings_group(self): def _create_settings_group(self):
"""生成设置 group (lives in the right run column).""" """生成设置 group (lives in the right run column); two params per row."""
from PySide6.QtWidgets import QFormLayout
gen = QGroupBox("生成设置") gen = QGroupBox("生成设置")
gv = QVBoxLayout(gen) gv = QVBoxLayout(gen)
self._retry_failed_chk = QCheckBox("重试上次失败的行") self._retry_failed_chk = QCheckBox("重试上次失败的行")
gv.addWidget(self._retry_failed_chk) gv.addWidget(self._retry_failed_chk)
form = QFormLayout()
self._concurrency = QSpinBox() self._concurrency = QSpinBox()
self._concurrency.setRange(1, 16) self._concurrency.setRange(1, 16)
self._interval = QDoubleSpinBox() self._interval = QDoubleSpinBox()
@@ -256,15 +255,32 @@ class AiOutfitPanel(QWidget):
self._resolution.addItems(_RESOLUTIONS) self._resolution.addItems(_RESOLUTIONS)
self._quality = QComboBox() self._quality = QComboBox()
self._quality.addItems(_QUALITIES) self._quality.addItems(_QUALITIES)
form.addRow("并发数", self._concurrency)
form.addRow("新请求间隔", self._interval) pairs = [
form.addRow("单任务冷却", self._cooldown) ("并发数", self._concurrency), ("新请求间隔", self._interval),
form.addRow("失败重试", self._retry_count) ("单任务冷却", self._cooldown), ("失败重试", self._retry_count),
form.addRow("分辨率", self._resolution) ("分辨率", self._resolution), ("JPG 质量", self._quality),
form.addRow("JPG 质量", self._quality) ]
gv.addLayout(form) grid = QGridLayout()
grid.setHorizontalSpacing(10)
grid.setVerticalSpacing(8)
grid.setColumnStretch(0, 1)
grid.setColumnStretch(1, 1)
for i, (label, widget) in enumerate(pairs):
grid.addWidget(self._field(label, widget), i // 2, i % 2)
gv.addLayout(grid)
return gen return gen
def _field(self, label_text, widget):
"""A compact label-above-control cell for the 2-column settings grid."""
cell = QWidget()
v = QVBoxLayout(cell)
v.setContentsMargins(0, 0, 0, 0)
v.setSpacing(2)
v.addWidget(QLabel(label_text))
v.addWidget(widget)
return cell
def _path_row(self, line_edit, on_browse): def _path_row(self, line_edit, on_browse):
row = QHBoxLayout() row = QHBoxLayout()
row.addWidget(line_edit, stretch=1) row.addWidget(line_edit, stretch=1)