Source code for autopilot.utils.invoker

HAVE_PYSIDE = False
try:
    from PySide2 import QtCore
    HAVE_PYSIDE = True
except ImportError:
    pass

_INVOKER = None

if HAVE_PYSIDE:

[docs] class InvokeEvent(QtCore.QEvent): """ Sends signals to the main QT thread from spawned message threads See `stackoverflow <https://stackoverflow.com/a/12127115>`_ """ EVENT_TYPE = QtCore.QEvent.Type(QtCore.QEvent.registerEventType()) def __init__(self, fn, *args, **kwargs): """ Accepts a function, its args and kwargs and wraps them as a :class:`QtCore.QEvent` """ QtCore.QEvent.__init__(self, InvokeEvent.EVENT_TYPE) self.fn = fn self.args = args self.kwargs = kwargs
[docs] class Invoker(QtCore.QObject): """ Wrapper that calls an evoked event made by :class:`.InvokeEvent` """
[docs] def event(self, event): """ Args: event: """ event.fn(*event.args, **event.kwargs) return True
[docs]def get_invoker(): if not globals()['HAVE_PYSIDE']: raise Exception("PySide2 could not be imported, no GUI event invoker can be gotten") if globals()['_INVOKER'] is None: globals()['_INVOKER'] = Invoker() return globals()['_INVOKER']