Initial Commit

This commit is contained in:
helldh 2026-02-27 23:18:40 +03:00
commit 18d456bf2e
20 changed files with 1442 additions and 0 deletions

57
composer.py Normal file
View file

@ -0,0 +1,57 @@
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())