Skip to content

Replace Flet with a native PySide6 GUI#22

Merged
TN019 merged 5 commits into
mainfrom
refactor
Jul 26, 2026
Merged

Replace Flet with a native PySide6 GUI#22
TN019 merged 5 commits into
mainfrom
refactor

Conversation

@TN019

@TN019 TN019 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

背景

Flet 桌面端的架构是"Python 进程 + 独立的通用 viewer 客户端"两个进程,导致一整类只能绕、不能修的问题:Dock 身份要靠复制 bundle/改 plist/重签名(core/viewer.py 整个模块为此存在),关窗行为要靠 pyobjc 隐藏 viewer 进程,而且实测发现 NSRunningApplication.hide() 返回值不可靠,隐藏与最小化会叠加执行。决定整体迁移到 PySide6:单进程原生 app,这类问题从根上消失。

改动与实现

  • 新视图层 gui_qt/(约 1,500 行):main_window(侧边栏导航 + 4Hz drain 定时器 + 生命周期)、run_page(拖放输入、增量行渲染、事件日志、通栏操作条)、history_page(分组卡片 + 查看/补译对话框)、settings_page(设置表单 + 模型管理/环境检查/应用内更新三个对话框)、theme(设计代币 + 浅/深两套 QSS + QPalette,跟随系统外观实时切换)、widgets(卡片/省略标签/toast)
  • GuiViewModel 和整个 core 零改动——视图层规则原样保留:UI 线程不碰磁盘/网络、增量渲染、i18n 全覆盖、切语言重挂载
  • 生命周期不再需要任何 workaround:关窗 = closeEvent → hide()(macOS;其他平台最小化),Dock 图标点击经 ApplicationActivate 事件恢复窗口,⌘Q 经 QuitRole 菜单真正退出;应用内更新器复用同一退出路径
  • Dock 身份自动正确:launcher 是 exec uv run scripto、uv 亦为 exec,Qt 进程就是 bundle 进程——删除 LSUIElement 后 Dock 只有一个 Scripto 图标,core/viewer.py(品牌化手术)整个删除
  • 依赖:flet/flet-web/pyobjc → pyside6;顺手修了 engines/models.py 的 HF 缓存路径在 import 时被 huggingface_hub 固化的问题(改为调用时从环境解析,附带解决了测试顺序耦合)
  • UI 升级:侧边栏导航替代顶部 tab,卡片式列表、indigo 主色、统一圆角与间距,浅/深色各自校过对比度

验证

  • uv run pytest -q:147 passed / 5 skipped。新增 tests/test_gui_qt.py(offscreen 无头):窗口构建与导航、关窗隐藏而非退出、切语言重挂载、主题切换、drain 更新行与日志;CI 增加 Qt 无头运行库安装
  • 离屏渲染了浅/深色 × 三页共 6 张截图逐一检查(滚动区背景、状态色、底栏通栏、checkbox 对比度等问题已在迭代中修复)
  • 待人工确认:实机跑一次真实转录批次;关窗后 Dock 点击恢复;⌘Q 退出;应用内更新重启

TN019 added 5 commits July 26, 2026 01:13
…dentity, close-to-hide with no AppKit workarounds, and a restyled light/dark UI.
…s the server, and the transcription language moves onto the run page.
…own 640x480 default geometry and painted over the dialog; clear_layout() now detaches before deferred deletion.
…ean text), and checkboxes go back to native Fusion indicators so the check mark is visible.
…ag-drop, remove per-entry — the free-text paths box is gone.
@TN019
TN019 merged commit 201629d into main Jul 26, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant