This commit is contained in:
2026-04-27 11:00:40 +02:00
parent d4825553a9
commit 90bd0ecdf5
11 changed files with 1002 additions and 130 deletions
+17 -68
View File
@@ -382,77 +382,27 @@ def _open_preview(root, pdf_path: Path):
def _rename_dialog(nazev: str, info_lines: list[str]) -> str | None:
"""
Tkinter dialog pro schválení / opravu názvu souboru.
Spustí rename_dialog.py jako subprocess — vyhneme se Tkinter konfliktům s PyCharm.
Vrátí finální název (s .pdf) nebo None = přeskočit.
"""
import tkinter as tk
import tempfile
result = {"value": None}
data = {"nazev": nazev, "info_lines": info_lines}
tmp = Path(tempfile.mktemp(suffix=".json"))
tmp.write_text(json.dumps(data, ensure_ascii=False), encoding="utf-8")
root = tk.Tk()
root.withdraw()
root.tk.call("encoding", "system", "utf-8")
dlg = tk.Toplevel(root)
dlg.title("Schválení názvu souboru")
dlg.resizable(True, False)
dlg.attributes("-topmost", True)
pad = {"padx": 12, "pady": 6}
# Informační sekce
frame_info = tk.Frame(dlg, bg="#f0f0f0", bd=1, relief="sunken")
frame_info.pack(fill="x", **pad)
for line in info_lines:
color = "#b00000" if line.startswith("") else "#004080" if line.startswith("") else "#333"
tk.Label(frame_info, text=line, anchor="w", bg="#f0f0f0",
fg=color, font=("Segoe UI", 10)).pack(fill="x", padx=8, pady=1)
# Pole pro název (bez .pdf)
tk.Label(dlg, text="Název souboru (bez .pdf):", anchor="w",
font=("Segoe UI", 9, "bold")).pack(fill="x", padx=12, pady=(10, 2))
nazev_bez = nazev[:-4] if nazev and nazev.endswith(".pdf") else (nazev or "")
var = tk.StringVar(value=nazev_bez)
entry = tk.Entry(dlg, textvariable=var, font=("Segoe UI", 10), width=90)
entry.pack(fill="x", padx=12, pady=(0, 10))
entry.icursor(tk.END)
entry.focus_set()
# Tlačítka
frame_btn = tk.Frame(dlg)
frame_btn.pack(pady=(0, 12))
def schvalit(event=None):
result["value"] = var.get().strip()
root.destroy()
def preskocit(event=None):
result["value"] = None
root.destroy()
tk.Button(frame_btn, text="✓ Schválit (Enter)", command=schvalit,
bg="#2a7a2a", fg="white", font=("Segoe UI", 10, "bold"),
padx=16, pady=6).pack(side="left", padx=8)
tk.Button(frame_btn, text="✗ Přeskočit (Esc)", command=preskocit,
bg="#7a2a2a", fg="white", font=("Segoe UI", 10),
padx=16, pady=6).pack(side="left", padx=8)
dlg.bind("<Return>", schvalit)
dlg.bind("<Escape>", preskocit)
# Umísti dialog vpravo od náhledu (nebo vystředit pokud náhled není)
dlg.update_idletasks()
sw = dlg.winfo_screenwidth()
sh = dlg.winfo_screenheight()
w = dlg.winfo_width()
h = dlg.winfo_height()
x = min(720, sw - w - 20)
y = (sh - h) // 2
dlg.geometry(f"+{x}+{y}")
root.mainloop()
return result["value"]
dialog_script = Path(__file__).parent / "rename_dialog.py"
try:
proc = subprocess.run(
[sys.executable, str(dialog_script), str(tmp)],
capture_output=True, text=True, encoding="utf-8",
)
output = proc.stdout.strip()
if output:
return json.loads(output).get("value")
return None
finally:
tmp.unlink(missing_ok=True)
def print_verification(verif: dict, rc_from_scan: str):
@@ -564,7 +514,6 @@ def _start_preview_process(pdf_path: Path):
viewer = Path(__file__).parent / "preview_viewer.py"
proc = subprocess.Popen(
[sys.executable, str(viewer), str(tmp), "--delete-on-close"],
creationflags=subprocess.CREATE_NO_WINDOW if hasattr(subprocess, "CREATE_NO_WINDOW") else 0,
)
def close():