Source code for pymodaq_gui.qt_utils


import os
import sys
import warnings

from qtpy import QtCore
from qtpy.QtCore import QLocale
from pymodaq_utils import logger as logger_module
from pymodaq_utils.config import Config

from pymodaq_gui.qvariant import QVariant


logger = logger_module.set_logger(logger_module.get_module_name(__file__))

config = Config()


[docs]def set_qt_backend(): backend_present = True if config('qtbackend', 'backend').lower() not in [mod.lower() for mod in sys.modules]: backend_present = False logger.warning(f"The chosen Qt backend ({config('qtbackend', 'backend')}) has not been installed...\n" f"Trying another...") backends = config('qtbackend', 'backends') backends.pop(backends.index(config('qtbackend', 'backend'))) for backend in backends: if backend.lower() in [mod.lower() for mod in sys.modules]: backend_present = True config['qtbackend', 'backend'] = backend break if backend_present: os.environ['QT_API'] = config('qtbackend', 'backend') logger.info('************************') logger.info(f"{config('qtbackend', 'backend')} Qt backend loaded") logger.info('************************') else: msg = f"No Qt backend could be found in your system, please install either pyqt5/6 or pyside2/6." \ f"pyqt5 is still preferred, while pyqt6 should mostly work." logger.critical(msg) warnings.warn(msg, FutureWarning, 3) print(msg.upper())
[docs]def decode_data(encoded_data): """ Decode QbyteArrayData generated when drop items in table/tree/list view Parameters ---------- encoded_data: QByteArray Encoded data of the mime data to be dropped Returns ------- data: list list of dict whose key is the QtRole in the Model, and the value a QVariant """ data = [] ds = QtCore.QDataStream(encoded_data, QtCore.QIODevice.ReadOnly) while not ds.atEnd(): row = ds.readInt32() col = ds.readInt32() map_items = ds.readInt32() item = {} for ind in range(map_items): key = ds.readInt32() #TODO check this is fine value = QVariant() #value = None ds >> value item[QtCore.Qt.ItemDataRole(key)] = value.value() data.append(item) return data
[docs]def setLocale(): """ defines the Locale to use to convert numbers to strings representation using language/country conventions Default is English and US """ language = getattr(QLocale, config('style', 'language')) country = getattr(QLocale, config('style', 'country')) QLocale.setDefault(QLocale(language, country))