Browse Source

优化文件选择功能,新增文件信息加载和页码输入,提升用户交互体验

zhch158_admin 2 tháng trước cách đây
mục cha
commit
40ee82a6e3
1 tập tin đã thay đổi với 36 bổ sung35 xóa
  1. 36 35
      streamlit_ocr_validator.py

+ 36 - 35
streamlit_ocr_validator.py

@@ -33,14 +33,26 @@ class StreamlitOCRValidator:
         self.text_bbox_mapping = {}
         self.selected_text = None
         self.marked_errors = set()
-        self.show_all_boxes = False
-        self.fit_to_container = True
-        self.zoom_level = 1.0
-        self.current_angle = 0
+        self.file_info = []
+        self.selected_file_index = 0
+        self.display_options = []
+        self.file_paths = []
 
         # 初始化布局管理器
         self.layout_manager = OCRLayoutManager(self)
+
+        # 加载文件信息
+        self.load_file_info()
         
+    def load_file_info(self):
+        # 查找可用的OCR文件
+        self.file_info = find_available_ocr_files(self.config['paths']['ocr_out_dir'])
+        # 初始化session_state中的选择索引
+        if self.file_info:
+            # 创建显示选项列表
+            self.display_options = [f"{info['display_name']}" for info in self.file_info]
+            self.file_paths = [info['path'] for info in self.file_info]
+
     def setup_page_config(self):
         """设置页面配置"""
         ui_config = self.config['ui']
@@ -347,8 +359,17 @@ def main():
     """主应用"""
     # 初始化应用
     if 'validator' not in st.session_state:
-        st.session_state.validator = StreamlitOCRValidator()
+        validator = StreamlitOCRValidator()
+        st.session_state.validator = validator
         st.session_state.validator.setup_page_config()
+        # 页面标题
+        config = st.session_state.validator.config
+        st.title(config['ui']['page_title'])
+        # st.markdown("---")
+    else:
+        # 主内容区域
+        validator = st.session_state.validator
+        config = st.session_state.validator.config
     
     if 'selected_text' not in st.session_state:
         st.session_state.selected_text = None
@@ -356,60 +377,47 @@ def main():
     if 'marked_errors' not in st.session_state:
         st.session_state.marked_errors = set()
     
-    # 同步标记的错误到validator
-    st.session_state.validator.marked_errors = st.session_state.marked_errors
-    
-    # 页面标题
-    config = st.session_state.validator.config
-    st.title(config['ui']['page_title'])
-    # st.markdown("---")
-
     with st.container(height=100, horizontal=True, horizontal_alignment='left'):
         # st.subheader("📁 文件选择")
-        # 查找可用的OCR文件
-        file_info = find_available_ocr_files(config['paths']['ocr_out_dir'])
         # 初始化session_state中的选择索引
         if 'selected_file_index' not in st.session_state:
             st.session_state.selected_file_index = 0
-        if file_info:
+        if validator.display_options:
             # 创建显示选项列表
-            display_options = [f"{info['display_name']}" for info in file_info]
-            file_paths = [info['path'] for info in file_info]
-        
             selected_index = st.selectbox("选择OCR结果文件", 
-                range(len(display_options)),
-                format_func=lambda i: display_options[i],
+                range(len(validator.display_options)),
+                format_func=lambda i: validator.display_options[i],
                 index=st.session_state.selected_file_index,
                 key="selected_selectbox",
                 label_visibility="collapsed")
             # 更新session_state
             if selected_index != st.session_state.selected_file_index:
                 st.session_state.selected_file_index = selected_index
-                
-            selected_file = file_paths[selected_index]
+
+            selected_file = validator.file_paths[selected_index]
 
             # number_input, 范围是文件数量,默认值是1,步长是1
             # 页码输入器
-            current_page = file_info[selected_index]['page']
+            current_page = validator.file_info[selected_index]['page']
             page_input = st.number_input("输入一个数字", 
                 placeholder="输入页码", 
                 label_visibility="collapsed",
-                min_value=1, max_value=len(display_options), value=current_page, step=1,
+                min_value=1, max_value=len(validator.display_options), value=current_page, step=1,
                 key="page_input"
             )
             # 当页码输入改变时,更新文件选择
             if page_input != current_page:
                 # 查找对应页码的文件索引
-                for i, info in enumerate(file_info):
+                for i, info in enumerate(validator.file_info):
                     if info['page'] == page_input:
                         st.session_state.selected_file_index = i
-                        selected_file = file_paths[i]
+                        selected_file = validator.file_paths[i]
                         st.rerun()
                         break
 
             if st.button("🔄 加载文件", type="secondary") and selected_file:
                 st.session_state.validator.load_ocr_data(selected_file)
-                st.success(f"✅ 已加载第{file_info[selected_index]['page']}页")
+                st.success(f"✅ 已加载第{validator.file_info[selected_index]['page']}页")
                 st.rerun()
         else:
             st.warning("未找到OCR结果文件")
@@ -423,13 +431,6 @@ def main():
             st.session_state.marked_errors = set()
             st.rerun()
 
-    # 主内容区域
-    validator = st.session_state.validator
-    
-    if not validator.ocr_data:
-        st.info("👈 请在左侧选择并加载OCR结果文件")
-        return
-    
     # 显示统计信息
     stats = validator.get_statistics()