fix: окно редактора — главное (не Toplevel), лог ошибок в importmapper_error.log
Раньше root прятался (withdraw), а редактор открывался Toplevel — на Windows окно могло не появиться. Теперь редактор строится прямо на главном окне. Ошибки запуска пишутся в importmapper_error.log.
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user