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)