(self, root, processor)
| 181 | |
| 182 | class App: |
| 183 | def __init__(self, root, processor): |
| 184 | self.processor = processor |
| 185 | self.processor.app = self |
| 186 | self.processor.log_callback = self.log |
| 187 | self.config_manager = ConfigManager() |
| 188 | self.hotkey_manager = create_hotkey_manager(self.toggle_processing) |
| 189 | self.hotkey_var = tk.StringVar(value='ctrl+shift+o') |
| 190 | self.screenshot_hotkey_var = tk.StringVar(value='') # 添加截图快捷键变量 |
| 191 | self.provider_var = tk.StringVar(value='OPENAI') # 确保 provider_var 在 load_settings 之前定义 |
| 192 | self.url_var = tk.StringVar(value='') |
| 193 | self.system_prompt_var = tk.StringVar(value=self.processor.system_prompt) |
| 194 | self.user_prompt_var = tk.StringVar(value=self.processor.user_prompt) |
| 195 | self.max_tokens_var = tk.IntVar( value=self.processor.max_tokens) |
| 196 | self.process_pre_exist_image_var = tk.BooleanVar(value=False) # 用于标记是否处理软件启动时已经存在的剪贴板图片 |
| 197 | self.log_text = tk.Text() # 确保 log_text 在 load_settings 之前定义 |
| 198 | self.root = root |
| 199 | self.root.title("OCR") |
| 200 | self.root.configure(bg='#ffffff') |
| 201 | |
| 202 | # 配置 ttk 样式 |
| 203 | style = ttk.Style() |
| 204 | style.theme_use('clam') |
| 205 | |
| 206 | # 设置风格 |
| 207 | primary_color = '#95ec69' # 绿色,与成功状态的胶囊图标一致 |
| 208 | text_color = '#000000' # 黑色文字 |
| 209 | bg_color = '#ffffff' # 白色背景 |
| 210 | |
| 211 | style.configure('TButton', padding=6, relief="flat", |
| 212 | background=primary_color, foreground=text_color) |
| 213 | style.map('TButton', |
| 214 | background=[('active', primary_color)], |
| 215 | foreground=[('active', text_color)]) |
| 216 | style.configure('TLabel', background=bg_color, foreground=text_color) |
| 217 | style.configure('TFrame', background=bg_color) |
| 218 | style.configure('TLabelframe', background=bg_color) |
| 219 | # 根据操作系统调整 LabelFrame 标题字体大小 |
| 220 | if platform.system() == 'Darwin': |
| 221 | lf_label_font = ('Segoe UI', 11, 'bold') |
| 222 | else: |
| 223 | lf_label_font = ('Segoe UI', 9, 'bold') |
| 224 | style.configure('TLabelframe.Label', background=bg_color, |
| 225 | foreground=text_color, font=lf_label_font) |
| 226 | style.configure('TEntry', padding=6) |
| 227 | style.configure('TCombobox', padding=6) |
| 228 | |
| 229 | # 初始化变量 |
| 230 | self.provider_var = tk.StringVar(value='OPENAI') |
| 231 | self.api_key_var = tk.StringVar() |
| 232 | self.proxy_var = tk.StringVar() |
| 233 | self.model_var = tk.StringVar(value='gpt-4o') |
| 234 | self.inline_var = tk.StringVar(value='$ $') |
| 235 | self.block_var = tk.StringVar(value='$$ $$') |
| 236 | |
| 237 | # 定义服务商配置字典 |
| 238 | self.provider_settings = { |
| 239 | 'OPENAI': { |
| 240 | 'api_key': '', |
nothing calls this directly
no test coverage detected