# main.py
# -*- coding: utf-8 -*-
import sys
import tkinter as tk
from tkinter import ttk
from gui.main_interface import MainInterface
from modules.data.database_module import init_database
# Импорт окна авторизации (добавлено)
try:
from gui.auth_interface import AuthInterface
except ImportError:
print("[FATAL] Не найден файл gui/auth_interface.py")
sys.exit(1)
init_database()
def main():
# --- ШАГ 1: Создаем ГЛАВНОЕ ОКНО ---
# ИСПРАВЛЕНО: Теперь мы создаем экземпляр твоего подготовленного класса
app = MainInterface()
app.title("ДОЗОР -- Heri-Hodie-Cras")
app.geometry("458x360")
app.resizable(False, False)
current_user = {"login": None}
def do_login(username, password):
"""Обработчик успеха из окна авторизации."""
if username and password:
current_user["login"] = username
enable_app(app) # Разблокируем именно это окно 'app'
auth_win.destroy()
else:
from tkinter import messagebox
messagebox.showwarning("Ошибка", "Поля не могут быть пустыми")
# --- ШАГ 2: Блокируем интерфейс ДО любых расчетов геометрии ---
disable_app(app)
# Центрируем окно НА ЭКРАНЕ
screen_w = app.winfo_screenwidth()
screen_h = app.winfo_screenheight()
win_w, win_h = 458, 360
pos_x = int((screen_w / 2) - (win_w / 2))
pos_y = int((screen_h / 2) - (win_h / 2))
app.geometry(f"{win_w}x{win_h}+{pos_x}+{pos_y}")
app.deiconify()
app.lift()
app.focus_force()
# Поверх главного окна открываем модальное окно входа
try:
auth_win = AuthInterface(app, on_login_click=do_login)
auth_win.transient(app)
auth_win.grab_set()
app.wait_window(auth_win)
except Exception as e:
print(f"[CRITICAL ERROR] Failed to initialize Auth Window: {e}")
app.destroy()
return
if not current_user["login"]:
app.destroy()
return
# --- ШАГ 3: Приложение работает ---
app.mainloop()
def disable_app(root_widget):
for child in root_widget.winfo_children():
config_state(child, "disabled")
disable_app(child)
def enable_app(root_widget):
for child in root_widget.winfo_children():
config_state(child, "normal")
enable_app(child)
def config_state(widget, state):
widget_class = str(widget).split('!')[-1].split('.')[0]
if isinstance(widget, tk.Button):
widget.config(state=state)
elif isinstance(widget, ttk.Entry) or isinstance(widget, ttk.Combobox):
widget.config(state=state)
elif hasattr(widget, 'config'):
try:
widget.config(state=state)
except Exception:
pass
if __name__ == "__main__":
main()