Merged
Conversation
新增设置对话框功能,包含常规、转换和高级三个标签页,支持配置文件保存目录、 Pandoc路径、Excel粘贴选项等。同时增加中文化支持并优化Tkinter窗口管理逻辑, 解决Tcl_AsyncDelete问题,提升UI线程安全性。
RICHQAQ
reviewed
Dec 9, 2025
Owner
RICHQAQ
left a comment
There was a problem hiding this comment.
这次新增的设置窗口已经可以承担大部分配置功能,因此我建议在托盘菜单中做进一步精简:
- 删除“编辑配置文件”和“重载配置”两个菜单项(已被设置窗口功能覆盖)
- 删除“实验性功能”分组(托盘菜单建议保持简洁)
因为这种实验性功能,不常用的设置内容可移到设置窗口中集中管理
这样托盘菜单会更短、更清晰,想问问你的看法
Owner
|
你一起改一下然后就提交过来吧,之后我就合并进去了,感谢贡献 |
新增设置对话框中的“实验性功能”选项卡,将“保留原始数学公式”功能移入该选项卡中。 移除了托盘菜单中的实用性功能子菜单、语言选择菜单以及编辑和重载配置文件的菜单项。 英文设置标题。
RICHQAQ
reviewed
Dec 9, 2025
| "hotkey.runner.title_binding_failed": "Hotkey binding failed", | ||
| "hotkey.runner.title_invalid_config": "Hotkey error", | ||
| "hotkey.runner.title_serious_error": "Critical error", | ||
| "settings.dialog.title": "PasteMD Settings", |
| @@ -80,6 +80,7 @@ def _create_widgets(self): | |||
| self._create_general_tab() | |||
Owner
主要修正了gemini写的gs代码 1.修复设置界面多语言适配 2.修复托盘图标无法退出设置窗口导致窗口孤立的问题 3.修复了对话框阻塞主事件循环的架构缺陷 4.为其他界面提供了可复用的退出监听模式 5.添加了恢复默认路径按钮 6.微调设置界面布局
Contributor
Author
|
修改了一下,你看看还有没有我没考虑到的问题 |
- 添加窗口恢复和聚焦功能,优化设置对话框显示 - 支持清除参考文档路径和恢复默认 Pandoc 路径 - 更新中英文翻译,覆盖新设置项
Owner
|
我自己修改了一些小细节,应该是可以了 |
Owner
|
感谢支持 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

feat(settings):
1. 新增设置界面 (
SettingsDialog):* 创建了
pastemd/presentation/settings/dialog.py,实现了一个基于 Tkinter 的多标签页设置窗口。* 常规设置:支持修改界面语言、文件保存目录、保留临时文件、系统通知、自动打开文件、光标移动等选项。
* 转换设置:支持配置 Pandoc 路径、参考文档 (Reference Docx)、HTML 格式化选项(如删除线转换)、Markdown/HTML 缩进控制、保留原始公式等。
* 高级设置:支持启用 Excel 智能粘贴和格式保留选项。
* 实现了配置的加载、修改和保存逻辑,保存后会实时更新应用状态。
2. 完善 GUI 图标:
* 在
SettingsDialog中添加了图标设置逻辑,使用assets/icons/logo.ico。* 修改了
pastemd/presentation/hotkey/dialog.py,为热键设置窗口也添加了相同的图标,提升了一致性和专业感。3. 托盘菜单集成:
* 在托盘菜单中添加了“PasteMD 设置”选项。
* 实现了打开设置界面的回调函数,确保在主线程中安全地创建和显示 GUI 窗口,并在打开时暂停热键监听,关闭后恢复监听。
4. 国际化支持:
* 在
pastemd/i18n/locales/zh.py中添加了所有新界面所需的中文翻译。fix(gui_thread):
问题:修改热键,然后使用新的热键会抛出线程错误。
重构应用程序的 Tkinter 初始化和事件循环管理,解决了
Tcl_AsyncDelete: async handler deleted by the wrong thread错误。核心问题在于,Tkinter 控件(如
HotkeyDialog和SettingsDialog)正在创建它们自己的tk.Tk()根实例,这可能发生在不同的线程中,或与主应用程序的生命周期产生冲突。Tkinter 不是线程安全的,所有 UI 操作都必须在创建了根窗口的主线程上执行。Tcl_AsyncDelete错误通常发生在 Tcl 解释器被错误的线程销毁时。全局 Tk 根窗口管理 (
pastemd/core/state.py):AppState中添加了一个root字段,用于持有全局的tkinter.Tk实例。这确保了整个应用程序只有一个、一致的根窗口。主应用程序循环重构 (
pastemd/app/app.py):tk.Tk()根窗口并将其隐藏(root.withdraw())。root.after()机制替换了用于处理 UI 队列的自定义while True循环。这将自定义任务队列的处理直接集成到 Tkinter 的主事件循环(root.mainloop())中,确保所有 UI 任务都在正确的线程上下文中执行。对话框实现更新 (
pastemd/presentation/hotkey/dialog.py,pastemd/presentation/settings/dialog.py):app_state.root。tk.Toplevel窗口(子窗口),而不是新的tk.Tk实例。这可以防止创建多个 Tcl 解释器并避免它们之间的冲突。show()方法,对Toplevel窗口使用wait_window(),而不是启动一个嵌套的mainloop(),从而维持了清晰的事件循环结构。_safe_destroy)。