def handle_colorstop_changed(self, config_widget): if config_widget.valid: reordered = sorted(self.stop_vbox.get_children(), key=lambda cs: cs.get_offset()) gradient = Gradient() for i, cs_config in enumerate(reordered): self.stop_vbox.reorder_child(cs_config, i) offset, color = cs_config.get_colorstop() if color is not None: gradient.add_colorstop(offset, color) self.option.value = gradient self.preview.set_gradient(gradient) self.emit('changed')