Skip to content

CoreApplicationMixin

Base classes

Name Children Inherits
ObjectMixin
prettyqt.core.object

Subclasses

Class Module Description
CoreApplication prettyqt.core.coreapplication
GuiApplicationMixin prettyqt.gui.guiapplication

⋔ Inheritance diagram

graph TD
  1473299836496["core.CoreApplicationMixin"]
  1473299815024["core.ObjectMixin"]
  140713234304496["builtins.object"]
  1473299815024 --> 1473299836496
  140713234304496 --> 1473299815024

🛈 DocStrings

Bases: ObjectMixin

Source code in prettyqt\core\coreapplication.py
class CoreApplicationMixin(core.ObjectMixin):
    translators: dict[str, core.Translator] = {}

    @classmethod
    def call_on_exit(cls, func: Callable):
        instance = cls.instance()
        if instance is None:
            raise RuntimeError("No QApplication running")
        instance.aboutToQuit.connect(func)

    @classmethod
    def get_application_file_path(cls) -> pathlib.Path:
        return pathlib.Path(cls.applicationFilePath())

    @classmethod
    def get_application_dir_path(cls) -> pathlib.Path:
        return pathlib.Path(cls.applicationDirPath())

    @classmethod
    def add_library_path(cls, path: datatypes.PathType):
        cls.addLibraryPath(os.fspath(path))

    @classmethod
    def get_library_paths(cls) -> list[pathlib.Path]:
        return [pathlib.Path(i) for i in cls.libraryPaths()]

    def set_application_name(self, name: str):
        if os.name == "nt" and name and not getattr(sys, "frozen", False):
            import ctypes

            ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(name)
        self.setApplicationName(name)

    def set_metadata(
        self,
        app_name: str | None = None,
        app_version: None | datatypes.SemanticVersionType = None,
        org_name: str | None = None,
        org_domain: str | None = None,
    ):
        if app_name is not None:
            self.setApplicationName(app_name)
        match app_version:
            case None:
                pass
            case core.QVersionNumber():
                app_version = app_version.toString()
                self.setApplicationVersion(app_version)
            case tuple():
                app_version = ".".join(str(i) for i in app_version)
                self.setApplicationVersion(app_version)
            case str():
                self.setApplicationVersion(app_version)
            case _:
                raise TypeError(app_version)
        if org_name is not None:
            self.setOrganizationName(org_name)
        if org_domain is not None:
            self.setOrganizationDomain(org_domain)

    @classmethod
    def load_language_file(cls, file: datatypes.PathType) -> core.Translator:
        translator = core.Translator()
        translator.load_file(file)
        cls.installTranslator(translator)
        cls.translators[str(file)] = translator
        return translator

    @classmethod
    def load_language(cls, language: str) -> core.Translator:
        translator = core.Translator.for_language(language)
        cls.installTranslator(translator)
        cls.translators[language] = translator
        return translator

    def post_event(
        self,
        obj: core.QObject,
        event: core.QEvent,
        priority: int | constants.EventPriorityStr = "normal",
    ):
        match priority:
            case int():
                prio = priority
            case str():
                prio = constants.EVENT_PRIORITY[priority]
            case _:
                raise TypeError(priority)
        return self.postEvent(obj, event, prio)

    def in_main_thread(self) -> bool:
        """Check if we are in the thread in which QApplication object was created.

        Returns:
            True if we are in the main thread, False otherwise.
        """
        return self.thread() == core.Thread.currentThread()

    def main_loop(self) -> int:
        return self.exec()

    @staticmethod
    def restart():
        os.execl(sys.executable, sys.executable, *sys.argv)

in_main_thread() -> bool

Check if we are in the thread in which QApplication object was created.

Source code in prettyqt\core\coreapplication.py
def in_main_thread(self) -> bool:
    """Check if we are in the thread in which QApplication object was created.

    Returns:
        True if we are in the main thread, False otherwise.
    """
    return self.thread() == core.Thread.currentThread()