示例#1
0
def getPlugins():
    """Returns a map with all custom widget plugins."""

    widgets = {}
    plugins = {}
    qarbon_dir = moduleDirectory(qarbon)
    base_widget_dir = os.path.join(qarbon_dir, "qt", "gui")
    base_package = "qarbon.qt.gui."

    for filename in os.listdir(base_widget_dir):
        if filename.startswith(".") or filename.startswith("_") or \
           not filename.endswith(".py"):
            continue
        fullpath = os.path.join(base_widget_dir, filename)
        if not os.path.isfile(fullpath):
            continue
        modulename = base_package + os.path.splitext(filename)[0]
        try:
            widgets.update(getWidgetClasses(modulename))
        except ImportError:
            log.warning("Error importing %s", modulename)

    for _, widget_info in widgets.items():
        widget_klass = widget_info["klass"]
        widget_name = widget_info['name']
        info_func = getattr(widget_klass, "getQtDesignerPluginInfo", None)
        if info_func is None:
            continue
        info = info_func()
        if isinstance(info, collections.Mapping):
            plugin_klass = __build_qtdesigner_widget_plugin(widget_klass)
            plugin_klass_name = plugin_klass.__name__
            #globals()[plugin_klass_name] = plugin_klass
            plugins[plugin_klass_name] = plugin_klass
    return plugins
示例#2
0
def getPlugins():
    """Returns a map with all custom widget plugins."""

    widgets = {}
    plugins = {}
    qarbon_dir = moduleDirectory(qarbon)
    base_widget_dir = os.path.join(qarbon_dir, "qt", "gui")
    base_package = "qarbon.qt.gui."

    for filename in os.listdir(base_widget_dir):
        if filename.startswith(".") or filename.startswith("_") or \
           not filename.endswith(".py"):
            continue
        fullpath = os.path.join(base_widget_dir, filename)
        if not os.path.isfile(fullpath):
            continue
        modulename = base_package + os.path.splitext(filename)[0]
        try:
            widgets.update(getWidgetClasses(modulename))
        except ImportError:
            log.warning("Error importing %s", modulename)

    for _, widget_info in widgets.items():
        widget_klass = widget_info["klass"]
        widget_name = widget_info['name']
        info_func = getattr(widget_klass, "getQtDesignerPluginInfo", None)
        if info_func is None:
            continue
        info = info_func()
        if isinstance(info, collections.Mapping):
            plugin_klass = __build_qtdesigner_widget_plugin(widget_klass)
            plugin_klass_name = plugin_klass.__name__
            #globals()[plugin_klass_name] = plugin_klass
            plugins[plugin_klass_name] = plugin_klass
    return plugins
示例#3
0
 def __onPropertyTreeChanged(self, item, column):
     if column != 2:
         return
     qobject = self.qobject
     if qobject is None:
         log.warning("qobject disappeared while trying to set a property " \
                     "on it")
         return
     prop_name = item.data(column, QtCore.Qt.UserRole)
     prop_value = item.data(column, QtCore.Qt.DisplayRole)
     qobject.setProperty(prop_name, prop_value)
示例#4
0
文件: util.py 项目: ESRF-BCU/qarbon
def grabWidget(widget, fileName, period=None):
    """Grabs the given widget into the given image filename. If period is
    None (default) it grabs immediately once and returns.
    If period is given and >0 means grab the image every period (in seconds).

    .. warning::
        this method **MUST** be called from the same thread which created
        the widget

    :param widget: the Qt widget to be grabbed
    :type widget: QtWidget
    :param fileName:  the name of the image file
    :type fileName: str
    :param period: period (seconds)
    :type period: float
    """
    if period is None:
        widgetName = widget.objectName()
        widgetTitle = widget.windowTitle()
        log.debug("Grabbing widget '%s' to '%s':", widgetName, fileName)
        try:
            pixmap = QtGui.QPixmap.grabWidget(widget)
            if fileName.endswith(".svg"):
                import qarbon.external.qt.QtSvg

                generator = qarbon.external.qt.QtSvg.QSvgGenerator()
                generator.setFileName(fileName)
                generator.setSize(pixmap.size())
                if hasattr(generator, "setViewBox"):
                    viewBox = QtCore.QRect(QtCore.QPoint(0, 0), pixmap.size())
                    generator.setViewBox(viewBox)
                title = "Qarbon widget"
                if widgetTitle:
                    title += " - " + widgetTitle
                elif widgetName:
                    title += " - " + widgetName
                desc = "An SVG created by the qarbon widget grabber"
                generator.setTitle(title)
                generator.setDescription(desc)
                painter = QtGui.QPainter()
                painter.begin(generator)
                try:
                    painter.drawPixmap(0, 0, -1, -1, pixmap)
                finally:
                    painter.end()
            else:
                pixmap.save(fileName, quality=100)
        except Exception:
            log.warning("Could not save file into '%s':", fileName)
            log.debug("Details:", exc_info=1)

    ret = __GrabberThread(widget, fileName, period)
    ret.start()
    return ret
示例#5
0
 def __onPropertyTreeChanged(self, item, column):
     if column != 2:
         return
     qobject = self.qobject
     if qobject is None:
         log.warning("qobject disappeared while trying to set a property " \
                     "on it")
         return
     prop_name = item.data(column, QtCore.Qt.UserRole)
     prop_value = item.data(column, QtCore.Qt.DisplayRole)
     qobject.setProperty(prop_name, prop_value)
示例#6
0
def grabWidget(widget, fileName, period=None):
    """Grabs the given widget into the given image filename. If period is
    None (default) it grabs immediately once and returns.
    If period is given and >0 means grab the image every period (in seconds).

    .. warning::
        this method **MUST** be called from the same thread which created
        the widget

    :param widget: the Qt widget to be grabbed
    :type widget: QtWidget
    :param fileName:  the name of the image file
    :type fileName: str
    :param period: period (seconds)
    :type period: float
    """
    if period is None:
        widgetName = widget.objectName()
        widgetTitle = widget.windowTitle()
        log.debug("Grabbing widget '%s' to '%s':", widgetName, fileName)
        try:
            pixmap = QtGui.QPixmap.grabWidget(widget)
            if fileName.endswith('.svg'):
                import qarbon.external.qt.QtSvg
                generator = qarbon.external.qt.QtSvg.QSvgGenerator()
                generator.setFileName(fileName)
                generator.setSize(pixmap.size())
                if hasattr(generator, 'setViewBox'):
                    viewBox = QtCore.QRect(QtCore.QPoint(0, 0), pixmap.size())
                    generator.setViewBox(viewBox)
                title = "Qarbon widget"
                if widgetTitle:
                    title += " - " + widgetTitle
                elif widgetName:
                    title += " - " + widgetName
                desc = "An SVG created by the qarbon widget grabber"
                generator.setTitle(title)
                generator.setDescription(desc)
                painter = QtGui.QPainter()
                painter.begin(generator)
                try:
                    painter.drawPixmap(0, 0, -1, -1, pixmap)
                finally:
                    painter.end()
            else:
                pixmap.save(fileName, quality=100)
        except Exception:
            log.warning("Could not save file into '%s':", fileName)
            log.debug("Details:", exc_info=1)

    ret = __GrabberThread(widget, fileName, period)
    ret.start()
    return ret
示例#7
0
def __setPyQt4API(element, api_version=2):
    try:
        ver = sip.getapi(element)
    except ValueError:
        ver = -1

    if ver < 0:
        try:
            sip.setapi(element, api_version)
            log.debug("%s API set to version %d",
                      element, sip.getapi("QString"))
        except ValueError:
            log.warning("Error setting %s API to version %s", element,
                        api_version, exc_info=1)
            return False
    elif ver < api_version:
        log.info("%s API set to version %s (advised: version >= %s)",
                 element, ver, api_version)
    return True
示例#8
0
def __preparePyQt4():

    # In python 3 both QString and QVariant API are set to level 2 so
    # nothing to do
    if sys.version_info[0] > 2:
        return __import("PyQt4")

    # For PySide compatibility, use the new-style string API that
    # automatically converts QStrings to Unicode Python strings. Also,
    # automatically unpack QVariants to their underlying objects.
    if sip is None:
        log.warning("Could not find sip")
    elif sip.SIP_VERSION < 0x040900:
        sip_ver = sip.SIP_VERSION_STR
        log.warning("Using old sip %s (advised >= 4.9)", sip_ver)
    else:
        __setPyQt4API("QString", 2)
        __setPyQt4API("QVariant", 2)

    return __import("PyQt4")
示例#9
0
def __preparePyQt4():

    # In python 3 both QString and QVariant API are set to level 2 so
    # nothing to do
    if sys.version_info[0] > 2:
        return __import("PyQt4")

    # For PySide compatibility, use the new-style string API that
    # automatically converts QStrings to Unicode Python strings. Also,
    # automatically unpack QVariants to their underlying objects.
    if sip is None:
        log.warning("Could not find sip")
    elif sip.SIP_VERSION < 0x040900:
        sip_ver = sip.SIP_VERSION_STR
        log.warning("Using old sip %s (advised >= 4.9)", sip_ver)
    else:
        __setPyQt4API("QString", 2)
        __setPyQt4API("QVariant", 2)

    return __import("PyQt4")
示例#10
0
def __setPyQt4API(element, api_version=2):
    try:
        ver = sip.getapi(element)
    except ValueError:
        ver = -1

    if ver < 0:
        try:
            sip.setapi(element, api_version)
            log.debug("%s API set to version %d", element,
                      sip.getapi("QString"))
        except ValueError:
            log.warning("Error setting %s API to version %s",
                        element,
                        api_version,
                        exc_info=1)
            return False
    elif ver < api_version:
        log.info("%s API set to version %s (advised: version >= %s)", element,
                 ver, api_version)
    return True
示例#11
0
 def __onFocus(self):
     qwidget = self.qobject
     if qwidget is None:
         log.warning("widget disappeared while trying to set a property " \
                     "on it")
         return
示例#12
0
 def __onFocus(self):
     qwidget = self.qobject
     if qwidget is None:
         log.warning("widget disappeared while trying to set a property " \
                     "on it")
         return