Раньше root прятался (withdraw), а редактор открывался Toplevel — на Windows окно могло не появиться. Теперь редактор строится прямо на главном окне. Ошибки запуска пишутся в importmapper_error.log.
64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""ImportMapper — универсальный редактор импорта из Excel-опросников.
|
|
|
|
Запуск:
|
|
python3 main.py (или: py main.py)
|
|
|
|
При ошибке запуска подробности пишутся в файл importmapper_error.log
|
|
рядом с этой программой — можно прислать его содержимое.
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
import traceback
|
|
|
|
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 editor import ImportMapperWindow
|
|
|
|
root = tk.Tk()
|
|
# Окно редактора строится прямо на root (главное окно)
|
|
ImportMapperWindow(root)
|
|
root.mainloop()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
main()
|
|
except Exception as e:
|
|
msg = f"{type(e).__name__}: {e}\n\n{traceback.format_exc()}"
|
|
# Пишем в файл-лог и в консоль
|
|
_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",
|
|
"Подробности в файле:\n" + LOG_PATH + "\n\n" + str(e))
|
|
r.destroy()
|
|
except Exception:
|
|
pass
|
|
sys.exit(1)
|