You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

133 lines
4.6 KiB

import json
import tkinter as tk
import tkinter.messagebox
# 配置文件路径
ConfigJsonFile = "Umi-OCR_config.json"
# 配置项
ConfigDict = {
# 计划任务设置
"isOpenExplorer": False, # T时任务完成后打开资源管理器到输出目录。isOutputFile为T时才管用
"isOpenOutputFile": False, # T时任务完成后打开输出文件。isOutputFile为T时才管用
"isOkMission": False, # T时本次任务完成后执行指定计划任务。
"okMissionName": "", # 当前选择的计划任务的name。
"okMission": { # 计划任务事件,code为cmd代码
"关机": # 取消:shutdown /a
{"code": r'msg %username% /time:25 "Umi-OCR任务完成,将在30s后关机" & echo 关闭本窗口可取消关机 & choice /t 30 /d y /n >nul & shutdown /f /s /t 0'},
"休眠": # 用choice实现延时
{"code": r'msg %username% /time:25 "Umi-OCR任务完成,将在30s后休眠" & echo 关闭本窗口可取消休眠 & choice /t 30 /d y /n >nul & shutdown /f /h'},
},
# 读取剪贴板设置
"isGlobalHotkey": False, # T时绑定全局快捷键
"isNeedCopy": False, # T时识别完成后自动复制文字
"globalHotkey": "", # 全局快捷键
# 忽略区域设置
"ignoreArea": None, # 忽略区域
# "ignoreAreaPreset": [], # 忽略区域预设列表
# 输入文件设置
"isRecursiveSearch": False, # T时导入文件夹将递归查找子文件夹中所有图片
# 输出文件设置
"isOutputFile": True, # T时输出内容写入本地文件
"outputFilePath": "", # 输出文件目录
"outputFileName": "", # 输出文件名称
# 输出格式设置
"isOutputDebug": False, # T时输出调试信息
"isIgnoreNoText": True, # T时忽略(不输出)没有文字的图片信息
"outputStyle": 1, # 1:纯文本,2:Markdown
# 识别器设置
"ocrToolPath": "PaddleOCR-json/PaddleOCR_json.exe", # 识别器路径
"ocrConfigName": "", # 当前选择的配置文件的name。
"ocrConfig": { # 配置文件信息
"简体中文": {
"path": "PaddleOCR_json_config_简体中文.txt"
}
},
"argsStr": "", # 启动参数字符串
"imageSuffix": ".jpg .jpe .jpeg .jfif .png .webp .bmp .tif .tiff" # 图片后缀
}
# 需要保存的设置项
SaveItem = [
"isOpenExplorer",
"isOpenOutputFile",
"okMission",
"okMissionName",
"isGlobalHotkey",
"isNeedCopy",
"globalHotkey",
"isRecursiveSearch",
"isOutputFile",
"isOutputDebug",
"isIgnoreNoText",
"outputStyle",
"ocrToolPath",
"ocrConfigName",
"ocrConfig",
"argsStr",
"imageSuffix",
]
class ConfigModule:
def initValue(self, optVar):
"""初始化配置。传入并设置tk变量字典"""
self.optVar = optVar
def load():
"""从本地json文件读取配置"""
try:
with open(ConfigJsonFile, "r", encoding="utf8")as fp:
jsonData = json.load(fp) # 读取json文件
for key in jsonData:
if key in ConfigDict:
ConfigDict[key] = jsonData[key]
except json.JSONDecodeError: # 反序列化json错误
if tk.messagebox.askyesno(
"遇到了一点小问题",
f"载入配置文件 {ConfigJsonFile} 时,反序列化json失败。\n\n选 “是” 重置该文件。\n选 “否” 将退出程序。"):
self.save()
else:
exit(0)
except FileNotFoundError: # 无配置文件
self.save()
load() # 加载配置文件
for key in optVar:
if key in ConfigDict:
optVar[key].set(ConfigDict[key])
def isSaveItem(self, key):
return key in SaveItem
def save(self):
"""保存配置到本地json文件"""
saveDict = {} # 提取需要保存的项
for key in SaveItem:
saveDict[key] = ConfigDict[key]
with open(ConfigJsonFile, "w", encoding="utf8")as fp:
fp.write(json.dumps(saveDict, indent=4, ensure_ascii=False))
def update(self, key):
"""更新某个值,从tk变量读取到配置项"""
ConfigDict[key] = self.optVar[key].get()
def get(self, key):
"""获取一个配置项的值"""
return ConfigDict[key]
def set(self, key, value):
"""设置一个配置项的值"""
if key in self.optVar:
self.optVar[key].set(value)
else:
ConfigDict[key] = value
Config = ConfigModule() # 设置模块 单例