This commit is contained in:
2026-03-12 01:50:57 +05:00
parent ec82b528a3
commit c33befe7c2
12 changed files with 1553 additions and 69 deletions

44
main.py
View File

@@ -10,7 +10,7 @@ import tkinter as tk
from tkinter import filedialog, messagebox, ttk
from pathlib import Path
from services.data_loader import load_ki, load_table2, build_mif_index
from services.data_loader import load_ki, load_table2, build_mif_index, load_table3
from services.form_filler import fill_form
from services.output_generator import make_filename, combine_forms, generate_table4
@@ -30,7 +30,8 @@ FONT_LOG = ("Courier New", 9)
def run_processing(table1_path: str, table2_path: str, mif_dir: str,
template_path: str, output_dir: str,
log_callback, progress_callback, done_callback):
log_callback, progress_callback, done_callback,
table3_path: str = ""):
"""Выполняется в отдельном потоке."""
try:
out = Path(output_dir)
@@ -45,6 +46,15 @@ def run_processing(table1_path: str, table2_path: str, mif_dir: str,
log_callback(f" Таблица 2: {len(t2_rows)} строк")
log_callback(f" MIF-файлов: {len(mif_idx)}")
t3_images = {}
t3_scales = {}
if table3_path and Path(table3_path).is_file():
try:
t3_images, t3_scales = load_table3(table3_path)
log_callback(f" Таблица 3 (схемы): {len(t3_images)} записей")
except Exception as exc:
log_callback(f" Предупреждение: Не удалось загрузить Таблицу 3: {exc}")
log_callback("\n[2/4] Генерация форм...")
generated, errors = [], []
total = sum(1 for r in t2_rows if r[0])
@@ -58,9 +68,18 @@ def run_processing(table1_path: str, table2_path: str, mif_dir: str,
out_path = out / filename
log_callback(f" [{len(generated)+len(errors)+1}/{total}] {filename} ...", end="")
try:
fill_form(template_path, str(out_path), ki, t2_row, mif_idx)
scheme_png = t3_images.get(str(zu_file).strip())
oks_file_name = str(t2_row[10]).strip() if len(t2_row) > 10 and t2_row[10] else ""
oks_scheme_png = t3_images.get(oks_file_name) if oks_file_name else None
zu_scale = t3_scales.get(str(zu_file).strip())
oks_scale = t3_scales.get(oks_file_name) if oks_file_name else None
loc_zu = str(t2_row[4]).strip() if len(t2_row) > 4 and t2_row[4] else ""
fill_form(template_path, str(out_path), ki, t2_row, mif_idx,
zu_scheme=scheme_png, oks_scheme=oks_scheme_png,
zu_scale=zu_scale, oks_scale=oks_scale)
generated.append({"name": filename, "path": str(out_path),
"kv": str(kv), "zu_file": str(zu_file)})
"kv": str(kv), "zu_file": str(zu_file),
"loc_zu": loc_zu})
log_callback(" OK")
except Exception as exc:
log_callback(f" ОШИБКА: {exc}")
@@ -116,15 +135,17 @@ class App(tk.Tk):
self.var_t1 = self._add_field(card, "Таблица 1 (КИ):", "xlsx", 0)
self.var_t2 = self._add_field(card, "Таблица 2 (данные):", "xlsx", 1)
self.var_mif = self._add_field(card, "Папка MIF:", "dir", 2)
self.var_template = self._add_field(card, "Шаблон XLSX:", "xlsx", 3)
self.var_output = self._add_field(card, "Папка вывода:", "dir", 4)
self.var_t3 = self._add_field(card, "Таблица 3 (схемы):", "xlsx", 2)
self.var_mif = self._add_field(card, "Папка MIF:", "dir", 3)
self.var_template = self._add_field(card, "Шаблон XLSX:", "xlsx", 4)
self.var_output = self._add_field(card, "Папка вывода:", "dir", 5)
# Дефолты
base = Path(__file__).parent
data = base / "data" / "Исх.данные"
self.var_t1.set(str(data / "Таблица1 КИ-Неустроева.xlsx"))
self.var_t2.set(str(data / "Таблица 2 Перечень выявленных исх.данные.xlsx"))
self.var_t3.set(str(data / "Таблица 3 ( для схем).xlsx"))
self.var_mif.set(str(data / "1. 74 34 0400007 ГК вымпел-73"))
self.var_template.set(str(base / "data" / "ШАБЛОН ВЫЯВЛЕННЫЕ-1.xlsx"))
self.var_output.set(str(base / "output"))
@@ -188,9 +209,10 @@ class App(tk.Tk):
# ── Запуск ──────────────────────────────────────────────────────────── #
def _start(self):
t1 = self.var_t1.get().strip()
t2 = self.var_t2.get().strip()
mif = self.var_mif.get().strip()
t1 = self.var_t1.get().strip()
t2 = self.var_t2.get().strip()
t3 = self.var_t3.get().strip()
mif = self.var_mif.get().strip()
tmpl = self.var_template.get().strip()
out = self.var_output.get().strip()
@@ -211,6 +233,7 @@ class App(tk.Tk):
self._log_append,
lambda v: self.after(0, self._set_progress, v, None),
self._on_done),
kwargs={"table3_path": t3},
daemon=True,
)
thread.start()
@@ -264,6 +287,7 @@ class App(tk.Tk):
Поля ввода:
• Таблица 1 — файл xlsx с данными кадастрового инженера
• Таблица 2 — файл xlsx со списком выявленных объектов
• Таблица 3 — файл xlsx со схемами (необязательно)
• Папка MIF — папка с MIF-файлами контуров (*.mif)
• Шаблон — файл шаблона XLSX
• Папка вывода — куда сохранять результаты