fix: окно редактора — главное (не Toplevel), лог ошибок в importmapper_error.log

Раньше root прятался (withdraw), а редактор открывался Toplevel —
на Windows окно могло не появиться. Теперь редактор строится прямо
на главном окне. Ошибки запуска пишутся в importmapper_error.log.
This commit is contained in:
2026-08-03 10:23:16 +04:00
parent be8cde7512
commit 4451e3f914
2 changed files with 30 additions and 15 deletions
+3 -3
View File
@@ -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()
+26 -11
View File
@@ -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("ОШИБКА ЗАПУСКА:")
# Пишем в файл-лог и в консоль
_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)