Files
Dispatch/Dispatch_V0.1.1/main.py
2026-04-29 08:18:54 +04:00

119 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
# dispatch/main.py
"""Точка входа независимого приложения Dispatch.
Назначение модуля:
Минимальная процедура запуска отдельного приложения, которое
переиспользует модуль `hub.ticket` без копирования его логики.
Последовательность инициализации:
1. Подготовка диагностики и кодировок до тяжёлых импортов GUI.
2. Создание `QApplication` и применение системной темы.
3. Создание `DispatchMainWindow` и эмиссия текущей темы.
4. Запуск цикла событий `QApplication`.
"""
import sys
from error_logger import install_interpreter_hooks, log_exception, setup_error_logging
def _configure_console_encoding() -> None:
"""Настроить кодировку консоли для корректного вывода кириллицы."""
import os
try:
if sys.platform.startswith("win"):
import ctypes
kernel32 = ctypes.windll.kernel32
kernel32.SetConsoleOutputCP(65001)
kernel32.SetConsoleCP(65001)
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8")
if hasattr(sys.stderr, "reconfigure"):
sys.stderr.reconfigure(encoding="utf-8")
os.environ["PYTHONIOENCODING"] = "utf-8"
except Exception as exc:
log_exception(__name__, "_configure_console_encoding", exc)
def _bootstrap_runtime_diagnostics() -> None:
"""Включить журнал и перехват исключений до тяжёлых импортов."""
_configure_console_encoding()
setup_error_logging()
install_interpreter_hooks()
def _setup_theme(app) -> str:
"""Определить системную тему и применить базовую палитру окна."""
from PySide6.QtCore import Qt
from PySide6.QtGui import QColor, QPalette
theme = "dark"
color_scheme = Qt.ColorScheme.Unknown
if hasattr(app.styleHints(), "preferredColorScheme"):
color_scheme = app.styleHints().preferredColorScheme()
if color_scheme == Qt.ColorScheme.Unknown:
window_color = app.palette().color(QPalette.ColorRole.Window)
color_scheme = (
Qt.ColorScheme.Light
if window_color.lightness() >= 128
else Qt.ColorScheme.Dark
)
if color_scheme == Qt.ColorScheme.Dark:
theme = "dark"
palette = app.palette()
palette.setColor(QPalette.ColorRole.Window, QColor("#232323"))
palette.setColor(QPalette.ColorRole.WindowText, Qt.GlobalColor.white)
palette.setColor(QPalette.ColorRole.Base, QColor("#3C3C3C"))
palette.setColor(QPalette.ColorRole.Text, Qt.GlobalColor.white)
palette.setColor(QPalette.ColorRole.Button, Qt.GlobalColor.darkGray)
palette.setColor(QPalette.ColorRole.ButtonText, Qt.GlobalColor.white)
palette.setColor(QPalette.ColorRole.Highlight, QColor("#5B9FFF"))
palette.setColor(QPalette.ColorRole.HighlightedText, Qt.GlobalColor.black)
app.setPalette(palette)
else:
theme = "light"
palette = app.palette()
palette.setColor(QPalette.ColorRole.Window, QColor("#F8F9FB"))
palette.setColor(QPalette.ColorRole.WindowText, QColor("#172B4D"))
palette.setColor(QPalette.ColorRole.Base, QColor("#F8F9FB"))
palette.setColor(QPalette.ColorRole.Text, QColor("#172B4D"))
palette.setColor(QPalette.ColorRole.Button, QColor("#FFFFFF"))
palette.setColor(QPalette.ColorRole.ButtonText, QColor("#172B4D"))
palette.setColor(QPalette.ColorRole.Highlight, QColor("#0C66E4"))
palette.setColor(QPalette.ColorRole.HighlightedText, QColor("#FFFFFF"))
app.setPalette(palette)
return theme
def main() -> None:
"""Запустить независимое приложение Dispatch."""
_bootstrap_runtime_diagnostics()
from PySide6.QtWidgets import QApplication
from gui.theme_bus import theme_bus
from window import DispatchMainWindow
app = QApplication(sys.argv)
app.setStyle("Fusion")
app.setApplicationName("Dispatch")
current_theme = _setup_theme(app)
window = DispatchMainWindow()
theme_bus.theme_changed.emit(current_theme)
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()