Source code for magboltz_gui.main
"""Qt application entry point for Magboltz-GUI."""
from __future__ import annotations
import os
import signal
import sys
from importlib.resources import files
from typing import Any
from magboltz_gui.util.platform import ensure_qt_runtime_or_explain
from magboltz_gui.util.qt_style import (
apply_linux_style_fallback,
set_linux_platform_theme_env_if_available,
)
from magboltz_gui.util.icon_theme import ensure_icon_theme
[docs]
def main() -> None:
"""Create the application, show the main window, and enter the event loop."""
# Best-effort platform theme/style setup (Linux) without overriding user choices.
set_linux_platform_theme_env_if_available()
from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QApplication
from PyQt6.QtCore import Qt, QTimer
from magboltz_gui.window.main_window import MagboltzGUI
app: QApplication = QApplication(sys.argv)
apply_linux_style_fallback(app)
ensure_icon_theme()
app.setApplicationName("Magboltz GUI")
app.setOrganizationName("CERN")
# IMPORTANT for Wayland/GNOME: this sets the app-id from a desktop file name
app.setDesktopFileName(str(files("magboltz_gui.icons").joinpath("magboltz-gui.desktop")))
# Prefer SVG app icon; keep PNG as fallback.
app_icon_svg = files("magboltz_gui.icons").joinpath("icon.svg")
app_icon_png = files("magboltz_gui.icons").joinpath("icon-192x192.png")
if app_icon_svg.is_file():
app.setWindowIcon(QIcon(str(app_icon_svg)))
elif app_icon_png.is_file():
app.setWindowIcon(QIcon(str(app_icon_png)))
signal.signal(signal.SIGINT, _sigint_handler)
_keep_alive = QTimer()
_keep_alive.timeout.connect(lambda: None)
_keep_alive.start(200)
window: MagboltzGUI = MagboltzGUI()
window.setWindowFlag(Qt.WindowType.Window)
window.show()
sys.exit(app.exec())
def _sigint_handler(*_: Any) -> None:
"""Terminate the Qt application cleanly on Ctrl-C."""
from PyQt6.QtWidgets import QApplication
QApplication.quit()
sys.exit(130)
if __name__ == "__main__":
# Checking if we have QT available
ensure_qt_runtime_or_explain()
main()