Files
JiboAutoMod/gui/main_panel.py

60 lines
1.7 KiB
Python

from __future__ import annotations
import sys
from pathlib import Path
from PySide6.QtCore import QUrl, QObject, Slot
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine
from .process_runner import ConnectionMonitor, resolve_python, resolve_python_invocation
class Launcher(QObject):
def __init__(self, python_program: str, python_prefix: list[str]) -> None:
super().__init__()
self._python_program = python_program
self._python_prefix = list(python_prefix)
@Slot()
def launchInstaller(self) -> None:
# Start installer GUI in a separate process.
import subprocess
subprocess.Popen(
[self._python_program, *self._python_prefix, "-m", "gui.installer_gui"],
cwd=str(Path(__file__).resolve().parents[1]),
)
@Slot()
def launchUpdater(self) -> None:
import subprocess
subprocess.Popen(
[self._python_program, *self._python_prefix, "-m", "gui.updater_gui"],
cwd=str(Path(__file__).resolve().parents[1]),
)
def main() -> int:
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
conn = ConnectionMonitor()
py_program, py_prefix = resolve_python_invocation()
py_exec = resolve_python()
engine.rootContext().setContextProperty("conn", conn)
engine.rootContext().setContextProperty("pyExec", py_exec)
engine.rootContext().setContextProperty("launcher", Launcher(py_program, py_prefix))
qml_path = Path(__file__).resolve().parent / "qml" / "MainPanel.qml"
engine.load(QUrl.fromLocalFile(str(qml_path)))
if not engine.rootObjects():
return 1
return app.exec()
if __name__ == "__main__":
raise SystemExit(main())