Z230
This commit is contained in:
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user