- added qdarktheme package into the code
This commit is contained in:
19
libs/qdarktheme/qtpy/QtCore/__init__.py
Normal file
19
libs/qdarktheme/qtpy/QtCore/__init__.py
Normal 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
|
||||
20
libs/qdarktheme/qtpy/QtGui/__init__.py
Normal file
20
libs/qdarktheme/qtpy/QtGui/__init__.py
Normal 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
|
||||
13
libs/qdarktheme/qtpy/QtSvg/__init__.py
Normal file
13
libs/qdarktheme/qtpy/QtSvg/__init__.py
Normal 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
|
||||
50
libs/qdarktheme/qtpy/QtWidgets/__init__.py
Normal file
50
libs/qdarktheme/qtpy/QtWidgets/__init__.py
Normal 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
|
||||
11
libs/qdarktheme/qtpy/__init__.py
Normal file
11
libs/qdarktheme/qtpy/__init__.py
Normal 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.")
|
||||
82
libs/qdarktheme/qtpy/qt_compat.py
Normal file
82
libs/qdarktheme/qtpy/qt_compat.py
Normal 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()
|
||||
18
libs/qdarktheme/qtpy/qt_version.py
Normal file
18
libs/qdarktheme/qtpy/qt_version.py
Normal 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
|
||||
Reference in New Issue
Block a user