style: normalize code formatting across the codebase
- Standardize quote style (single to double quotes) - Improve code formatting consistency - Apply formatting to utilities, GUI components, and tools - Update imports and docstrings for consistency Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -78,12 +78,12 @@ class DataExtractionTab(ttk.Frame):
|
||||
label_text="ProductionID 文件:",
|
||||
file_type="file",
|
||||
file_types=[("文本文件", "*.txt"), ("所有文件", "*.*")],
|
||||
initial_dir="D:/python/playwrite/"
|
||||
initial_dir="D:/python/playwrite/",
|
||||
)
|
||||
self.input_file_selector.pack(fill=tk.X)
|
||||
|
||||
# 设置默认文件
|
||||
default_input = self.config.get('paths.production_id_file', 'ProductionID.txt')
|
||||
default_input = self.config.get("paths.production_id_file", "ProductionID.txt")
|
||||
if os.path.exists(default_input):
|
||||
self.input_file_selector.set(default_input)
|
||||
|
||||
@@ -96,14 +96,14 @@ class DataExtractionTab(ttk.Frame):
|
||||
label_text="保存为:",
|
||||
file_type="file",
|
||||
file_types=[("Excel 文件", "*.xlsx"), ("所有文件", "*.*")],
|
||||
initial_dir=self.config.get('paths.data_dir', 'data/')
|
||||
initial_dir=self.config.get("paths.data_dir", "data/"),
|
||||
)
|
||||
self.output_file_selector.pack(fill=tk.X)
|
||||
|
||||
# 设置默认输出文件
|
||||
default_output = os.path.join(
|
||||
self.config.get('paths.data_dir', 'data/'),
|
||||
self.config.get('paths.default_output', '离散备料计划维护_合并.xlsx')
|
||||
self.config.get("paths.data_dir", "data/"),
|
||||
self.config.get("paths.default_output", "离散备料计划维护_合并.xlsx"),
|
||||
)
|
||||
self.output_file_selector.set(default_output)
|
||||
|
||||
@@ -111,30 +111,42 @@ class DataExtractionTab(ttk.Frame):
|
||||
options_group = ttk.LabelFrame(parent, text="提取选项", padding=10)
|
||||
options_group.pack(fill=tk.X, pady=5)
|
||||
|
||||
self.verbose_var = tk.BooleanVar(value=self.config.get('extraction.verbose', True))
|
||||
ttk.Checkbutton(options_group, text="详细日志", variable=self.verbose_var).grid(row=0, column=0, sticky="w", padx=5)
|
||||
self.verbose_var = tk.BooleanVar(
|
||||
value=self.config.get("extraction.verbose", True)
|
||||
)
|
||||
ttk.Checkbutton(options_group, text="详细日志", variable=self.verbose_var).grid(
|
||||
row=0, column=0, sticky="w", padx=5
|
||||
)
|
||||
|
||||
self.headless_var = tk.BooleanVar(value=self.config.get('erp.headless', True))
|
||||
ttk.Checkbutton(options_group, text="无头模式 (不显示浏览器)", variable=self.headless_var).grid(row=0, column=1, sticky="w", padx=5)
|
||||
self.headless_var = tk.BooleanVar(value=self.config.get("erp.headless", True))
|
||||
ttk.Checkbutton(
|
||||
options_group, text="无头模式 (不显示浏览器)", variable=self.headless_var
|
||||
).grid(row=0, column=1, sticky="w", padx=5)
|
||||
|
||||
# 进度显示
|
||||
progress_group = ttk.LabelFrame(parent, text="进度", padding=10)
|
||||
progress_group.pack(fill=tk.X, pady=5)
|
||||
|
||||
self.progress_bar = ttk.Progressbar(progress_group, mode='determinate')
|
||||
self.progress_bar = ttk.Progressbar(progress_group, mode="determinate")
|
||||
self.progress_bar.pack(fill=tk.X, pady=5)
|
||||
|
||||
self.status_label = ttk.Label(progress_group, text="就绪", relief=tk.SUNKEN, anchor=tk.W)
|
||||
self.status_label = ttk.Label(
|
||||
progress_group, text="就绪", relief=tk.SUNKEN, anchor=tk.W
|
||||
)
|
||||
self.status_label.pack(fill=tk.X)
|
||||
|
||||
# 控制按钮
|
||||
button_frame = ttk.Frame(parent)
|
||||
button_frame.pack(fill=tk.X, pady=10)
|
||||
|
||||
self.start_button = ttk.Button(button_frame, text="开始提取", command=self.start_extraction)
|
||||
self.start_button = ttk.Button(
|
||||
button_frame, text="开始提取", command=self.start_extraction
|
||||
)
|
||||
self.start_button.pack(side=tk.LEFT, padx=5)
|
||||
|
||||
self.stop_button = ttk.Button(button_frame, text="停止", command=self.stop_extraction, state=tk.DISABLED)
|
||||
self.stop_button = ttk.Button(
|
||||
button_frame, text="停止", command=self.stop_extraction, state=tk.DISABLED
|
||||
)
|
||||
self.stop_button.pack(side=tk.LEFT, padx=5)
|
||||
|
||||
def _create_log_panel(self, parent):
|
||||
@@ -169,16 +181,14 @@ class DataExtractionTab(ttk.Frame):
|
||||
self.extracting = True
|
||||
self.start_button.config(state=tk.DISABLED)
|
||||
self.stop_button.config(state=tk.NORMAL)
|
||||
self.progress_bar['value'] = 0
|
||||
self.progress_bar["value"] = 0
|
||||
self.status_label.config(text="正在登录...")
|
||||
self.log_text.clear()
|
||||
self.log_text.info("开始数据提取...")
|
||||
|
||||
# 在后台线程中执行提取
|
||||
self.extraction_thread = threading.Thread(
|
||||
target=self._extraction_worker,
|
||||
args=(input_file, output_file),
|
||||
daemon=True
|
||||
target=self._extraction_worker, args=(input_file, output_file), daemon=True
|
||||
)
|
||||
self.extraction_thread.start()
|
||||
|
||||
@@ -197,20 +207,24 @@ class DataExtractionTab(ttk.Frame):
|
||||
|
||||
# 创建提取器实例
|
||||
self.extractor = DiscreteMaterialPlanExtractor(
|
||||
username=self.config.get('erp.username'),
|
||||
password=self.config.get('erp.password'),
|
||||
username=self.config.get("erp.username"),
|
||||
password=self.config.get("erp.password"),
|
||||
headless=self.headless_var.get(),
|
||||
verbose=self.verbose_var.get(),
|
||||
batch_size=self.config.get('extraction.batch_size', 100)
|
||||
batch_size=self.config.get("extraction.batch_size", 100),
|
||||
)
|
||||
|
||||
# 创建实时输出流,每次写入立即更新 GUI
|
||||
realtime_output = RealtimeOutput(lambda line: self._update_log(line, "INFO"))
|
||||
realtime_output = RealtimeOutput(
|
||||
lambda line: self._update_log(line, "INFO")
|
||||
)
|
||||
|
||||
# 创建进度回调函数
|
||||
def progress_callback(progress_info: ProgressInfo):
|
||||
# 计算总体进度百分比
|
||||
overall_percent = self.progress_calculator.calculate_overall_percent(progress_info)
|
||||
overall_percent = self.progress_calculator.calculate_overall_percent(
|
||||
progress_info
|
||||
)
|
||||
self._update_progress(overall_percent, progress_info.message)
|
||||
|
||||
# 重定向 stdout 并执行提取(带进度回调)
|
||||
@@ -218,7 +232,7 @@ class DataExtractionTab(ttk.Frame):
|
||||
result = self.extractor.extract(
|
||||
production_id_file=input_file,
|
||||
output_file=output_file,
|
||||
progress_callback=progress_callback
|
||||
progress_callback=progress_callback,
|
||||
)
|
||||
|
||||
if result and self.extracting:
|
||||
@@ -249,7 +263,7 @@ class DataExtractionTab(ttk.Frame):
|
||||
try:
|
||||
progress_data = self.progress_queue.get_nowait()
|
||||
value, message = progress_data
|
||||
self.progress_bar['value'] = value
|
||||
self.progress_bar["value"] = value
|
||||
self.status_label.config(text=message)
|
||||
except queue.Empty:
|
||||
break
|
||||
@@ -266,6 +280,7 @@ class DataExtractionTab(ttk.Frame):
|
||||
|
||||
def _update_log(self, message: str, level: str = "INFO"):
|
||||
"""线程安全的日志更新"""
|
||||
|
||||
def update():
|
||||
if self.extracting or level in ["ERROR", "WARNING", "SUCCESS"]:
|
||||
if level == "INFO":
|
||||
|
||||
Reference in New Issue
Block a user