@@ -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 """文件夹双击:进入该文件夹"""
0 commit comments