Skip to content

Commit dd2da16

Browse files
committed
修复文件夹对话框地址栏布局重叠问题,添加点击空白区域自动关闭输入框功能
1 parent 60d557e commit dd2da16

2 files changed

Lines changed: 48 additions & 30 deletions

File tree

desktop_qt_ui/widgets/folder_dialog.py

Lines changed: 46 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -178,35 +178,43 @@ def _init_ui(self):
178178
""")
179179
address_layout.addWidget(self.edit_path_button)
180180

181-
# 添加边距的容器
182-
address_container = QWidget()
183-
address_container_layout = QVBoxLayout(address_container)
184-
address_container_layout.setContentsMargins(8, 4, 8, 4)
185-
address_container_layout.addWidget(address_widget)
186-
187-
layout.addWidget(address_container)
188-
189181
# 路径输入框(初始隐藏,点击编辑按钮时显示)
190182
self.path_edit = QLineEdit()
191183
self.path_edit.setPlaceholderText("输入路径后按回车跳转,或按 Esc 取消")
192-
self.path_edit.hide()
193184
self.path_edit.setStyleSheet("""
194185
QLineEdit {
195-
padding: 6px;
196-
border: 1px solid #0078d4;
197-
border-radius: 2px;
186+
padding: 8px;
187+
border: 2px solid #0078d4;
188+
border-radius: 3px;
198189
font-size: 13px;
190+
background-color: white;
199191
}
200192
""")
201193

202-
path_edit_container = QWidget()
203-
path_edit_layout = QVBoxLayout(path_edit_container)
204-
path_edit_layout.setContentsMargins(8, 0, 8, 4)
194+
# 创建一个容器来包含面包屑和输入框,它们互斥显示
195+
self.address_container = QWidget()
196+
address_container_layout = QVBoxLayout(self.address_container)
197+
address_container_layout.setContentsMargins(8, 4, 8, 8)
198+
address_container_layout.setSpacing(0)
199+
200+
# 面包屑容器
201+
self.breadcrumb_container = QWidget()
202+
breadcrumb_container_layout = QVBoxLayout(self.breadcrumb_container)
203+
breadcrumb_container_layout.setContentsMargins(0, 0, 0, 0)
204+
breadcrumb_container_layout.addWidget(address_widget)
205+
206+
# 输入框容器
207+
self.path_edit_container = QWidget()
208+
path_edit_layout = QVBoxLayout(self.path_edit_container)
209+
path_edit_layout.setContentsMargins(0, 0, 0, 0)
205210
path_edit_layout.addWidget(self.path_edit)
206-
path_edit_container.hide()
207-
self.path_edit_container = path_edit_container
211+
self.path_edit_container.hide()
212+
213+
# 将两个容器添加到主地址栏容器
214+
address_container_layout.addWidget(self.breadcrumb_container)
215+
address_container_layout.addWidget(self.path_edit_container)
208216

209-
layout.addWidget(path_edit_container)
217+
layout.addWidget(self.address_container)
210218

211219
# 主内容区域:左侧快捷栏 + 右侧文件夹树
212220
splitter = QSplitter(Qt.Orientation.Horizontal)
@@ -719,11 +727,10 @@ def _toggle_path_edit(self):
719727
"""切换路径编辑模式"""
720728
if self.path_edit_container.isVisible():
721729
# 隐藏输入框,显示面包屑
722-
self.path_edit_container.hide()
723-
self.breadcrumb_scroll.parentWidget().show()
730+
self._cancel_path_edit()
724731
else:
725732
# 显示输入框,隐藏面包屑
726-
self.breadcrumb_scroll.parentWidget().hide()
733+
self.breadcrumb_container.hide()
727734
self.path_edit_container.show()
728735
if self.history:
729736
self.path_edit.setText(self.history[self.history_index])
@@ -736,23 +743,34 @@ def _on_path_edit_confirmed(self):
736743
if path and os.path.isdir(path):
737744
self.navigate_to(path, add_to_history=True)
738745
# 切换回面包屑显示
739-
self.path_edit_container.hide()
740-
self.breadcrumb_scroll.parentWidget().show()
746+
self._cancel_path_edit()
741747
else:
742748
QMessageBox.warning(self, "路径错误", f"路径不存在或不是有效目录:\n{path}")
749+
# 保持输入框显示,让用户修改
743750

744751
def eventFilter(self, obj, event):
745-
"""事件过滤器:处理 Esc 键取消路径编辑"""
752+
"""事件过滤器:处理 Esc 键取消路径编辑和点击外部区域"""
753+
from PyQt6.QtCore import QEvent
754+
from PyQt6.QtGui import QKeyEvent, QMouseEvent
755+
746756
if obj == self.path_edit:
747-
from PyQt6.QtCore import QEvent
748-
from PyQt6.QtGui import QKeyEvent
749757
if event.type() == QEvent.Type.KeyPress:
750758
if event.key() == Qt.Key.Key_Escape:
751759
# 取消编辑,恢复面包屑
752-
self.path_edit_container.hide()
753-
self.breadcrumb_scroll.parentWidget().show()
760+
self._cancel_path_edit()
754761
return True
762+
elif event.type() == QEvent.Type.FocusOut:
763+
# 失去焦点时恢复面包屑
764+
self._cancel_path_edit()
765+
return False
766+
755767
return super().eventFilter(obj, event)
768+
769+
def _cancel_path_edit(self):
770+
"""取消路径编辑,恢复面包屑显示"""
771+
if self.path_edit_container.isVisible():
772+
self.path_edit_container.hide()
773+
self.breadcrumb_container.show()
756774

757775
def _on_folder_double_clicked(self, index: QModelIndex):
758776
"""文件夹双击:进入该文件夹"""

examples/config-example.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111
"target_lang": "CHS",
1212
"no_text_lang_skip": false,
1313
"gpt_config": "examples/gpt_config-example.yaml",
14-
"high_quality_prompt_path": "dict/zbjdbxjs.json",
14+
"high_quality_prompt_path": "dict/prompt_example.json",
1515
"max_requests_per_minute": 0
1616
},
1717
"ocr": {
1818
"use_mocr_merge": false,
1919
"ocr": "48px",
20-
"use_hybrid_ocr": true,
20+
"use_hybrid_ocr": false,
2121
"secondary_ocr": "mocr",
2222
"min_text_length": 0,
2323
"ignore_bubble": 0,

0 commit comments

Comments
 (0)