Add Dispatch_V0.1.1
This commit is contained in:
118
Dispatch_V0.1.1/main.py
Normal file
118
Dispatch_V0.1.1/main.py
Normal file
@@ -0,0 +1,118 @@
|
||||
# -*- 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()
|
||||
Reference in New Issue
Block a user