- added qdarktheme package into the code

This commit is contained in:
Marius Stanciu
2023-10-19 13:49:14 +03:00
parent 656bec2e7c
commit 28dbb70126
42 changed files with 3548 additions and 22 deletions

View File

@@ -0,0 +1,19 @@
"""Module for QtCore."""
from libs.qdarktheme.qtpy.qt_compat import QT_API, qt_import_error
if QT_API is None:
raise qt_import_error
if QT_API == "PySide6":
from PySide6.QtCore import * # type: ignore # noqa: F403
elif QT_API == "PyQt6":
from PyQt6.QtCore import * # type: ignore # noqa: F403
Slot = pyqtSlot # noqa: F405
Signal = pyqtSignal # noqa: F405
elif QT_API == "PyQt5":
from PyQt5.QtCore import * # type: ignore # noqa: F403
Slot = pyqtSlot # noqa: F405
Signal = pyqtSignal # noqa: F405
elif QT_API == "PySide2":
from PySide2.QtCore import * # type: ignore # noqa: F403

View File

@@ -0,0 +1,20 @@
"""Module for QtGui."""
from libs.qdarktheme.qtpy.qt_compat import QT_API, qt_import_error
if QT_API is None:
raise qt_import_error
if QT_API == "PySide6":
from PySide6.QtGui import * # type: ignore # noqa: F403
elif QT_API == "PyQt6":
from PyQt6.QtGui import * # type: ignore # noqa: F403
elif QT_API == "PyQt5":
from PyQt5.QtGui import * # type: ignore # noqa: F403
from PyQt5.QtWidgets import QAction, QActionGroup, QShortcut # type: ignore
elif QT_API == "PySide2":
from PySide2.QtGui import * # type: ignore # noqa: F403
from PySide2.QtWidgets import QAction, QActionGroup, QShortcut # type: ignore
if QT_API in ["PyQt5", "PySide2"]:
QAction = QAction # type: ignore # noqa: SIM909
QActionGroup = QActionGroup # type: ignore # noqa: SIM909
QShortcut = QShortcut # type: ignore # noqa: SIM909

View File

@@ -0,0 +1,13 @@
"""Module for QtSvg."""
from libs.qdarktheme.qtpy.qt_compat import QT_API, qt_import_error
if QT_API is None:
raise qt_import_error
if QT_API == "PySide6":
from PySide6.QtSvg import * # type: ignore # noqa: F403
elif QT_API == "PyQt6":
from PyQt6.QtSvg import * # type: ignore # noqa: F403
elif QT_API == "PyQt5":
from PyQt5.QtSvg import * # type: ignore # noqa: F403
elif QT_API == "PySide2":
from PySide2.QtSvg import * # type: ignore # noqa: F403

View File

@@ -0,0 +1,50 @@
"""Module for QtWidgets."""
from __future__ import annotations
from collections.abc import Sequence
from libs.qdarktheme.qtpy.qt_compat import QT_API
from libs.qdarktheme.qtpy.QtCore import Qt
from libs.qdarktheme.qtpy.QtGui import QPalette
if QT_API == "PySide6":
from PySide6.QtWidgets import * # type: ignore # noqa: F403
elif QT_API == "PyQt6":
from PyQt6.QtWidgets import * # type: ignore # noqa: F403
elif QT_API == "PyQt5":
from PyQt5.QtWidgets import * # type: ignore # noqa: F403
elif QT_API == "PySide2":
from PySide2.QtWidgets import * # type: ignore # noqa: F403
class Application(QApplication): # type: ignore # noqa: F405
"""Override QApplication."""
def __init__(self, args: Sequence[str] | None = None) -> None:
"""Override QApplication method."""
super().__init__(args)
def exec(self) -> int:
"""Override QApplication method."""
if hasattr(super(), "exec"):
return super().exec()
return super().exec_()
def exit(self, returnCode: int = 0) -> None: # noqa: N803
"""Override QApplication method."""
return super().exit(returnCode)
def setStyleSheet(self, sheet: str) -> None: # noqa: N802
"""Override QApplication method."""
return super().setStyleSheet(sheet)
def setAttribute(self, attribute: Qt.ApplicationAttribute, on: bool = True) -> None: # noqa: N802
"""Override QApplication method."""
super().setAttribute(attribute, on)
def setPalette(self, palette: QPalette, className: str | None = None) -> None: # noqa: N802, N803
"""Override QApplication method."""
super().setPalette(palette, className)
QApplication = Application

View File

@@ -0,0 +1,11 @@
"""Package applying Qt compat of PyQt6, PySide6, PyQt5 and PySide2."""
from libs.qdarktheme.qtpy.qt_compat import QtImportError
from libs.qdarktheme.qtpy.qt_version import __version__
try:
from libs.qdarktheme.qtpy import QtCore, QtGui, QtSvg, QtWidgets
except ImportError:
from libs.qdarktheme.util import get_logger as __get_logger
__logger = __get_logger(__name__)
__logger.warning("Failed to import QtCore, QtGui, QtSvg and QtWidgets.")

View File

@@ -0,0 +1,82 @@
"""Module for Qt compat."""
from __future__ import annotations
import os
import sys
class QtImportError(ImportError):
"""Error raise if no bindings could be selected."""
pass
qt_import_error = QtImportError(
"Failed to import qt-binding. Check packages(pip list)."
"\n\tAvailable Qt-binding packages: PySide6, PyQt6, PyQt5, PySide2."
)
# Qt6
_QT_API_PYSIDE6 = "PySide6"
_QT_API_PYQT6 = "PyQt6"
# Qt5
_QT_API_PYQT5 = "PyQt5"
_QT_API_PYSIDE2 = "PySide2"
_API_LIST = [_QT_API_PYSIDE6, _QT_API_PYQT6, _QT_API_PYQT5, _QT_API_PYSIDE2]
def _get_loaded_api() -> str | None:
"""Return which API is loaded.
If this returns anything besides None,
importing any other Qt-binding is unsafe.
"""
for api in _API_LIST:
if sys.modules.get(f"{api}.QtCore"):
return api
return None
def _get_environ_api() -> str | None:
"""Return which API is specified in environ."""
_qt_api_env = os.environ.get("QT_API")
if _qt_api_env is not None:
_qt_api_env = _qt_api_env.lower()
_env_to_module = {
"pyside6": _QT_API_PYSIDE6,
"pyqt6": _QT_API_PYQT6,
"pyqt5": _QT_API_PYQT5,
"pyside2": _QT_API_PYSIDE2,
None: None,
}
try:
return _env_to_module[_qt_api_env]
except KeyError:
raise KeyError(
"The environment variable QT_API has the unrecognized value "
f"{_qt_api_env!r}. "
f"Valid values are {[k for k in _env_to_module if k is not None]}"
) from None
def _get_installed_api() -> str | None:
"""Return which API is installed."""
# Fix [AttributeError: module 'importlib' has no attribute 'util']
# See https://stackoverflow.com/a/39661116/13452582
from importlib import util
for api in _API_LIST:
if util.find_spec(api) is not None:
return api
return None
QT_API = _get_loaded_api()
if QT_API is None:
QT_API = _get_environ_api()
if QT_API is None:
QT_API = _get_installed_api()

View File

@@ -0,0 +1,18 @@
"""Module for detecting Qt version."""
from __future__ import annotations
from libs.qdarktheme.qtpy.qt_compat import QT_API
__version__: str | None = None
if QT_API == "PySide6":
from PySide6 import __version__ # type: ignore
elif QT_API == "PyQt6":
from PyQt6.QtCore import PYQT_VERSION_STR # type: ignore
__version__ = PYQT_VERSION_STR
elif QT_API == "PyQt5":
from PyQt5.QtCore import PYQT_VERSION_STR # type: ignore
__version__ = PYQT_VERSION_STR
elif QT_API == "PySide2":
from PySide2 import __version__ # type: ignore # noqa: F401