From 4451e3f91420c4cb6acc653b31b24fd82f3b3a85 Mon Sep 17 00:00:00 2001 From: DokoGen Date: Mon, 3 Aug 2026 10:23:16 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BE=D0=BA=D0=BD=D0=BE=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B0=20=E2=80=94=20=D0=B3?= =?UTF-8?q?=D0=BB=D0=B0=D0=B2=D0=BD=D0=BE=D0=B5=20(=D0=BD=D0=B5=20Toplevel?= =?UTF-8?q?),=20=D0=BB=D0=BE=D0=B3=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= =?UTF-8?q?=20=D0=B2=20importmapper=5Ferror.log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Раньше root прятался (withdraw), а редактор открывался Toplevel — на Windows окно могло не появиться. Теперь редактор строится прямо на главном окне. Ошибки запуска пишутся в importmapper_error.log. --- editor.py | 6 +++--- main.py | 39 +++++++++++++++++++++++++++------------ 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/editor.py b/editor.py index 4e9eeaa..5071664 100644 --- a/editor.py +++ b/editor.py @@ -37,12 +37,12 @@ class ImportMapperWindow: self._row_map = {} self._vars = {} - self.window = tk.Toplevel(parent) + # Окно редактора — прямо на переданном root (главное окно, не Toplevel) + self.window = parent self.window.title("Редактор импорта из Excel-опросников") self.window.geometry("860x640") self.window.minsize(700, 500) - self.window.transient(parent) - self.window.grab_set() + self.window.deiconify() # на всякий случай показываем окно self._build_ui() self._load_current_settings() diff --git a/main.py b/main.py index 4854145..e8b4ddc 100644 --- a/main.py +++ b/main.py @@ -4,27 +4,36 @@ Запуск: python3 main.py (или: py main.py) + +При ошибке запуска подробности пишутся в файл importmapper_error.log +рядом с этой программой — можно прислать его содержимое. """ import sys import os import traceback -sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, HERE) + +LOG_PATH = os.path.join(HERE, 'importmapper_error.log') + + +def _write_log(msg: str): + try: + with open(LOG_PATH, 'w', encoding='utf-8') as f: + f.write(msg) + except Exception: + pass def main(): import tkinter as tk - from tkinter import messagebox from editor import ImportMapperWindow root = tk.Tk() - root.title("ImportMapper — редактор импорта из опросников") - root.geometry("300x120") - root.withdraw() # главное окно скрыто, работает дочернее - + # Окно редактора строится прямо на root (главное окно) ImportMapperWindow(root) - root.mainloop() @@ -32,17 +41,23 @@ if __name__ == "__main__": try: main() except Exception as e: - # Показываем ошибку и в окне, и в консоли msg = f"{type(e).__name__}: {e}\n\n{traceback.format_exc()}" - print("ОШИБКА ЗАПУСКА:") - print(msg) + # Пишем в файл-лог и в консоль + _write_log(msg) + try: + print("ОШИБКА ЗАПУСКА ImportMapper:") + print(msg) + except Exception: + pass + # Пытаемся показать окно с ошибкой try: import tkinter as tk from tkinter import messagebox r = tk.Tk() r.withdraw() - messagebox.showerror("Ошибка запуска ImportMapper", msg) + messagebox.showerror("Ошибка запуска ImportMapper", + "Подробности в файле:\n" + LOG_PATH + "\n\n" + str(e)) + r.destroy() except Exception: pass - input("Нажмите Enter для выхода...") sys.exit(1)