Exemplo n.º 1
0
 def __init__(self, layout: QtWidgets.QLayout, simulation: springModule, signal: QtCore.Signal):
     super().__init__(layout, signal)
     self.properties = {
         "end_time": QInputNumber(self.layout(), "Time", value=10),
         "h": QInputNumber(self.layout(), "Delta T", value=0.1),
         "plot_point": QInputChoice(self.layout(), "Plot Node", 0, [0], ["0"]),
     }
     self.initSignals()
     self.setTarget(simulation)
     signal.connect(self.setTarget)
Exemplo n.º 2
0
    def link(self, property_name: str, signal: QtCore.Signal = None, condition: callable = None, direct: bool = False):
        self.element = None
        self.direct = direct
        if direct:
            parts = property_name.split(".")
            s = self

            def get():
                target = s.element
                for part in parts:
                    target = getattr(target, part)
                return target

            def set(v):
                get()
                target = s.element
                for part in parts[:-1]:
                    target = getattr(target, part)
                setattr(target, parts[-1], v)
                return [s.element]

            self.setLinkedProperty = set
            self.getLinkedProperty = get
            self.serializeLinkedProperty = lambda x: "." + property_name + " = %s" % x
        else:
            def set(v):
                elements = []
                getattr(self.element, "set_" + property_name)(v)
                elements.append(self.element)
                for elm in self.element.figure.selection.targets:
                    elm = elm.target
                    if elm != self.element:
                        try:
                            getattr(elm, "set_" + property_name, None)(v)
                        except TypeError as err:
                            pass
                        else:
                            elements.append(elm)
                return elements

            self.setLinkedProperty = set  # lambda text: getattr(self.element, "set_"+property_name)(text)
            self.getLinkedProperty = lambda: getattr(self.element, "get_" + property_name)()
            self.serializeLinkedProperty = lambda x: ".set_" + property_name + "(%s)" % x

        if condition is None:
            self.condition = lambda x: True
        else:
            self.condition = condition

        self.editingFinished.connect(self.updateLink)
        signal.connect(self.setTarget)
Exemplo n.º 3
0
    def link(self, property_name: str, signal: QtCore.Signal = None, condition: callable = None, direct: bool = False):
        self.element = None
        self.direct = direct
        if direct:
            parts = property_name.split(".")
            s = self

            def get():
                target = s.element
                for part in parts:
                    target = getattr(target, part)
                return target

            def set(v):
                get()
                target = s.element
                for part in parts[:-1]:
                    target = getattr(target, part)
                setattr(target, parts[-1], v)
                return [s.element]

            self.setLinkedProperty = set
            self.getLinkedProperty = get
            self.serializeLinkedProperty = lambda x: "." + property_name + " = %s" % x
        else:
            def set(v):
                # special treatment for the xylabels, as they are not directly the target objects
                label_object = None
                if isinstance(self.element, Text) and isinstance(self.element.figure.selection.targets[0].target, Axes):
                    for elm in self.element.figure.selection.targets:
                        elm = elm.target
                        if self.element == getattr(getattr(elm, f"get_xaxis")(), "get_label")():
                            label_object = "x"
                            break
                        if self.element == getattr(getattr(elm, f"get_yaxis")(), "get_label")():
                            label_object = "y"
                            break

                elements = []
                getattr(self.element, "set_" + property_name)(v)
                elements.append(self.element)
                for elm in self.element.figure.selection.targets:
                    elm = elm.target
                    # special treatment for the xylabels, as they are not directly the target objects
                    if label_object is not None:
                        elm = getattr(getattr(elm, f"get_{label_object}axis")(), "get_label")()
                    if elm != self.element:
                        try:
                            getattr(elm, "set_" + property_name, None)(v)
                        except TypeError as err:
                            pass
                        else:
                            elements.append(elm)
                return elements

            self.setLinkedProperty = set  # lambda text: getattr(self.element, "set_"+property_name)(text)
            self.getLinkedProperty = lambda: getattr(self.element, "get_" + property_name)()
            self.serializeLinkedProperty = lambda x: ".set_" + property_name + "(%s)" % x

        if condition is None:
            self.condition = lambda x: True
        else:
            self.condition = condition

        self.editingFinished.connect(self.updateLink)
        signal.connect(self.setTarget)