from src.windows import LoginWindow, MainWindow from src.objects import User from src.db import DB_CONFIG from PyQt6.QtWidgets import QApplication from PyQt6.QtCore import QObject, pyqtSlot, pyqtSignal from PyQt6.QtSql import QSqlDatabase class Composer(QObject): """Управляет навигацией между окнами и жизненным циклом приложения""" render_request = pyqtSignal(User) def __init__(self): super().__init__() self._current = None self._app = QApplication([]) self._init_db() self.render_request.connect(self._render) def _init_db(self): """Инициализация Qt SQL соединения (используется QSqlTableModel)""" self._db = QSqlDatabase.addDatabase("QPSQL") self._db.setDatabaseName(DB_CONFIG['dbname']) self._db.setPort(DB_CONFIG['port']) self._db.setHostName(DB_CONFIG['host']) self._db.setUserName(DB_CONFIG['user']) self._db.setPassword(DB_CONFIG['password']) if not self._db.open(): raise Exception( f"Не удалось подключиться к БД: {self._db.lastError().text()}" ) @pyqtSlot(User) def _render(self, user: User): """Маршрутизация: все роли идут в MainWindow, права применяются внутри""" self._main_fabric(user) def _login_fabric(self): self.wlogin = LoginWindow(self, self._db) self._switch_window(self.wlogin) def _main_fabric(self, user: User): self.wmain = MainWindow(self, self._db, user) self._switch_window(self.wmain) def _switch_window(self, new_window): if self._current: self._current.close() new_window.show() self._current = new_window def run(self): import sys self._login_fabric() sys.exit(self._app.exec())