Source code for pyqtgraph.parametertree.parameterTypes.action

from ...Qt import QtCore, QtWidgets, QtGui
from ..Parameter import Parameter
from ..ParameterItem import ParameterItem


class ParameterControlledButton(QtWidgets.QPushButton):
    settableAttributes = {
        "title", "tip", "icon", "shortcut", "enabled", "visible"
    }

    def __init__(self, parameter=None, parent=None):
        super().__init__(parent)
        if not parameter:
            return
        parameter.sigNameChanged.connect(self.onNameChange)
        parameter.sigOptionsChanged.connect(self.updateOpts)
        self.clicked.connect(parameter.activate)
        self.updateOpts(parameter, parameter.opts)

    def updateOpts(self, param, opts):
        # Of the attributes that can be set on a QPushButton, only the text
        # and tooltip attributes are different from standard pushbutton names
        nameMap = dict(title="text", tip="toolTip")
        # Special case: "title" could be none, in which case make it something
        # readable by the simple copy-paste logic later
        opts = opts.copy()
        if "name" in opts:
            opts.setdefault("title", opts["name"])
        if "title" in opts and opts["title"] is None:
            opts["title"] = param.title()

        # Another special case: icons should be loaded from data before
        # being passed to the button
        if "icon" in opts:
            opts["icon"] = QtGui.QIcon(opts["icon"])

        for attr in self.settableAttributes.intersection(opts):
            buttonAttr = nameMap.get(attr, attr)
            capitalized = buttonAttr[0].upper() + buttonAttr[1:]
            setter = getattr(self, f"set{capitalized}")
            setter(opts[attr])

    def onNameChange(self, param, name):
        self.updateOpts(param, dict(title=param.title()))


[docs] class ActionParameterItem(ParameterItem): """ParameterItem displaying a clickable button.""" def __init__(self, param, depth): ParameterItem.__init__(self, param, depth) self.layoutWidget = QtWidgets.QWidget() self.layout = QtWidgets.QHBoxLayout() self.layout.setContentsMargins(0, 0, 0, 0) self.layoutWidget.setLayout(self.layout) self.button = ParameterControlledButton(param, self.layoutWidget) #self.layout.addSpacing(100) self.layout.addWidget(self.button) self.layout.addStretch() self.titleChanged() def treeWidgetChanged(self): ParameterItem.treeWidgetChanged(self) tree = self.treeWidget() if tree is None: return self.setFirstColumnSpanned(True) tree.setItemWidget(self, 0, self.layoutWidget) def titleChanged(self): self.setSizeHint(0, self.button.sizeHint())
[docs] class ActionParameter(Parameter): """ Used for displaying a button within the tree. ``sigActivated(self)`` is emitted when the button is clicked. Parameters ---------- icon: str Icon to display in the button. Can be any argument accepted by :class:`QIcon <QtGui.QIcon>`. shortcut: str Key sequence to use as a shortcut for the button. Note that this shortcut is associated with spawned parameters, i.e. the shortcut will only work when this parameter has an item in a tree that is visible. Can be set to any string accepted by :class:`QKeySequence <QtGui.QKeySequence>`. """ itemClass = ActionParameterItem sigActivated = QtCore.Signal(object) def activate(self): self.sigActivated.emit(self) self.emitStateChanged('activated', None)