@@ -579,6 +579,22 @@ def setup_signals(self):
579579 self .file_tree .itemSelectionChanged .connect (self .on_file_select )
580580 self .file_tree .itemDoubleClicked .connect (self .on_file_double_click )
581581
582+ # 设置文件树在失去焦点时仍显示选中状态
583+ self .file_tree .setStyleSheet ("""
584+ QTreeWidget {
585+ selection-background-color: #3daee9;
586+ selection-color: white;
587+ }
588+ QTreeWidget::item:selected {
589+ background-color: #3daee9;
590+ color: white;
591+ }
592+ QTreeWidget::item:selected:!focus {
593+ background-color: #bfbfbf; /* 失去焦点时的背景色 */
594+ color: black;
595+ }
596+ """ )
597+
582598 # 文件系统监控信号
583599 self .file_watcher .fileChanged .connect (self .on_file_changed )
584600 self .file_watcher .directoryChanged .connect (self .on_directory_changed )
@@ -816,11 +832,19 @@ def clear_target_folder(self):
816832 # 更新状态栏信息
817833 self .status_bar .showMessage ("目标目录已清除" )
818834
819- def load_files_in_folder (self ):
835+ def load_files_in_folder (self , auto_select = True ):
820836 """加载文件夹中的NFO文件"""
821837 if not self .folder_path :
822838 return
823839
840+ # 保存当前选中的项目信息
841+ current_selection = None
842+ if not auto_select :
843+ selected_items = self .file_tree .selectedItems ()
844+ if selected_items :
845+ item = selected_items [0 ]
846+ current_selection = [item .text (i ) for i in range (3 )]
847+
824848 self .file_tree .clear ()
825849 self .nfo_files = []
826850
@@ -848,16 +872,30 @@ def load_files_in_folder(self):
848872 item = QTreeWidgetItem ([first_level , second_level , nfo_file ])
849873 self .file_tree .addTopLevelItem (item )
850874
851- # 选中第一项
852- if self .file_tree .topLevelItemCount () > 0 :
875+ # 选择逻辑优化
876+ if auto_select and self .file_tree .topLevelItemCount () > 0 :
877+ # 初次加载时选中第一项
853878 first_item = self .file_tree .topLevelItem (0 )
854879 self .file_tree .setCurrentItem (first_item )
855880 self .on_file_select ()
881+ elif current_selection and self .file_tree .topLevelItemCount () > 0 :
882+ # 尝试恢复之前的选择
883+ selection_restored = False
884+ for i in range (self .file_tree .topLevelItemCount ()):
885+ item = self .file_tree .topLevelItem (i )
886+ if [item .text (j ) for j in range (3 )] == current_selection :
887+ self .file_tree .setCurrentItem (item )
888+ selection_restored = True
889+ break
890+
891+ # 如果无法恢复原选择,则清除选择状态
892+ if not selection_restored :
893+ self .file_tree .clearSelection ()
856894
857895 # 更新状态栏信息
858896 total_folders = len (set (os .path .dirname (f ) for f in self .nfo_files ))
859897 status_msg = f"目录: { self .folder_path } (共加载 { total_folders } 个文件夹)"
860- self .status_bar .showMessage (status_msg ) # 使用 self.status_bar
898+ self .status_bar .showMessage (status_msg )
861899
862900 except Exception as e :
863901 QMessageBox .critical (self , "错误" , f"加载文件失败: { str (e )} " )
@@ -1497,7 +1535,8 @@ def on_file_changed(self, path):
14971535 def on_directory_changed (self , path ):
14981536 """目录变化响应"""
14991537 if path == self .folder_path :
1500- self .load_files_in_folder ()
1538+ # 目录变化时不自动选择第一项,保持当前选择状态
1539+ self .load_files_in_folder (auto_select = False )
15011540
15021541 def toggle_image_display (self ):
15031542 """切换图片显示状态"""
0 commit comments