Ejemplo n.º 1
0
    def _init_ui(self):
        # Fixed Radio Button
        self.rb_fixed = QtWidgets.QRadioButton("Fixed Radius:")
        self.le_fixed = QtWidgets.QLineEdit()
        self.le_fixed.setMinimumWidth(150)
        self.le_fixed.setVisible(False)
        self.le_fixed.textEdited.connect(self.le_fixed_text_edited)
        self.rb_fixed.clicked.connect(self.rb_fixed_clicked)

        # QStackedWidget le_fixed
        self.tmp1 = QtWidgets.QWidget()
        self.sw_fixed = QtWidgets.QStackedWidget()
        self.sw_fixed.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                    QtWidgets.QSizePolicy.Fixed)
        self.sw_fixed.addWidget(self.le_fixed)
        self.sw_fixed.addWidget(self.tmp1)
        self.sw_fixed.setCurrentIndex(1)

        # Custom Radio Button + Table
        self.rb_custom = QtWidgets.QRadioButton("Custom:")
        self.tw_cutoff = CutoffTableWidget(self._radii)
        self.tw_cutoff.text_edited.connect(self.tw_cutoff_text_edited)
        self.rb_custom.clicked.connect(self.rb_custom_clicked)

        # Preset Combo Box
        self.cb_preset = CutoffPresetComboBox()
        self.cb_preset.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                     QtWidgets.QSizePolicy.Fixed)
        self.cb_preset.preset_selected.connect(self.cb_preset_selected)

        # History button
        self.pb_history = QtWidgets.QPushButton("History", self)
        self.pb_history.setMinimumWidth(0)
        self.pb_history.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                      QtWidgets.QSizePolicy.Fixed)
        self.pb_history.setAutoDefault(False)
        self.pb_history.clicked.connect(self.pb_history_clicked)
        if len(cutoff_history.filtered_history(self._radii.keys(), preferred_filenames_with_frames=\
                                               self._preferred_filenames_with_frames)) == 0:
            self.pb_history.setVisible(False)

        # Preset save
        self.cb_preset_save = QtWidgets.QCheckBox("Save as Preset", self)
        self.le_preset_save = QtWidgets.QLineEdit()
        self.le_preset_save.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                          QtWidgets.QSizePolicy.Fixed)
        self.le_preset_save.textChanged.connect(self.le_preset_save_changed)

        self.la_main = QtWidgets.QGridLayout()
        self.la_main.setContentsMargins(0, 0, 0, 0)
        self.la_fixed = QtWidgets.QHBoxLayout()
        self.la_fixed.setContentsMargins(0, 0, 0, 0)
        self.la_custom = QtWidgets.QHBoxLayout()
        self.la_custom.setContentsMargins(0, 0, 0, 0)
        self.la_preset_save = QtWidgets.QHBoxLayout()
        self.la_preset_save.setContentsMargins(0, 0, 0, 0)

        self.la_fixed.addWidget(self.rb_fixed)
        self.la_fixed.addWidget(self.sw_fixed)
        self.la_main.addLayout(self.la_fixed, 0, 0, 1, 2)
        self.la_custom.addWidget(self.rb_custom)
        self.la_main.addLayout(self.la_custom, 1, 0, 1, 2)
        self.la_main.addWidget(self.tw_cutoff, 2, 0, 1, 2)
        self.la_main.addWidget(self.cb_preset, 3, 0, 1, 1)
        self.la_main.addWidget(self.pb_history, 3, 1, 1, 1)
        self.la_preset_save.addWidget(self.cb_preset_save)
        self.la_preset_save.addWidget(self.le_preset_save)
        self.la_main.addLayout(self.la_preset_save, 4, 0, 1, 2)

        self.setLayout(self.la_main)

        self.rb_fixed.click()
Ejemplo n.º 2
0
    def _init_ui(self):
        # Fixed Radio Button
        self.rb_fixed = QtWidgets.QRadioButton("Fixed Radius:")
        self.le_fixed = QtWidgets.QLineEdit()
        self.le_fixed.setMinimumWidth(150)
        self.le_fixed.setVisible(False)
        self.le_fixed.textEdited.connect(self.le_fixed_text_edited)
        self.rb_fixed.clicked.connect(self.rb_fixed_clicked)

        # QStackedWidget le_fixed
        self.tmp1 = QtWidgets.QWidget()
        self.sw_fixed = QtWidgets.QStackedWidget()
        self.sw_fixed.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        self.sw_fixed.addWidget(self.le_fixed)
        self.sw_fixed.addWidget(self.tmp1)
        self.sw_fixed.setCurrentIndex(1)

        # Custom Radio Button + Table
        self.rb_custom = QtWidgets.QRadioButton("Custom:")
        self.tw_cutoff = CutoffTableWidget(self._radii)
        self.tw_cutoff.text_edited.connect(self.tw_cutoff_text_edited)
        self.rb_custom.clicked.connect(self.rb_custom_clicked)

        # Preset Combo Box
        self.cb_preset = CutoffPresetComboBox()
        self.cb_preset.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        self.cb_preset.preset_selected.connect(self.cb_preset_selected)

        # History button
        self.pb_history = QtWidgets.QPushButton("History", self)
        self.pb_history.setMinimumWidth(0)
        self.pb_history.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        self.pb_history.setAutoDefault(False)
        self.pb_history.clicked.connect(self.pb_history_clicked)
        if len(cutoff_history.filtered_history(self._radii.keys(), preferred_filenames_with_frames=\
                                               self._preferred_filenames_with_frames)) == 0:
            self.pb_history.setVisible(False)

        # Preset save
        self.cb_preset_save = QtWidgets.QCheckBox("Save as Preset", self)
        self.le_preset_save = QtWidgets.QLineEdit()
        self.le_preset_save.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        self.le_preset_save.textChanged.connect(self.le_preset_save_changed)

        self.la_main = QtWidgets.QGridLayout()
        self.la_main.setContentsMargins(0, 0, 0, 0)
        self.la_fixed = QtWidgets.QHBoxLayout()
        self.la_fixed.setContentsMargins(0, 0, 0, 0)
        self.la_custom = QtWidgets.QHBoxLayout()
        self.la_custom.setContentsMargins(0, 0, 0, 0)
        self.la_preset_save = QtWidgets.QHBoxLayout()
        self.la_preset_save.setContentsMargins(0, 0, 0, 0)

        self.la_fixed.addWidget(self.rb_fixed)
        self.la_fixed.addWidget(self.sw_fixed)
        self.la_main.addLayout(self.la_fixed, 0, 0, 1, 2)
        self.la_custom.addWidget(self.rb_custom)
        self.la_main.addLayout(self.la_custom, 1, 0, 1, 2)
        self.la_main.addWidget(self.tw_cutoff, 2, 0, 1, 2)
        self.la_main.addWidget(self.cb_preset, 3, 0, 1, 1)
        self.la_main.addWidget(self.pb_history, 3, 1, 1, 1)
        self.la_preset_save.addWidget(self.cb_preset_save)
        self.la_preset_save.addWidget(self.le_preset_save)
        self.la_main.addLayout(self.la_preset_save, 4, 0, 1, 2)

        self.setLayout(self.la_main)

        self.rb_fixed.click()
Ejemplo n.º 3
0
class RadiiWidget(QtWidgets.QWidget):
    class RadiiType:
        FIXED = 0
        CUSTOM = 1

    def __init__(self, radii, file_frame_dict, parent=None):
        super(RadiiWidget, self).__init__(parent)
        self._radii = radii
        self._file_frame_dict = file_frame_dict
        self._preferred_filenames_with_frames = dict(
            (os.path.basename(filepath), frames)
            for filepath, frames in self._file_frame_dict.iteritems())
        self._discard_preset_choice_on_next_rb_click = True  # Default value is True
        self._selected_radii_type = RadiiWidget.RadiiType.FIXED
        self._init_ui()
        self._init_cutoff_radii()

    def _init_ui(self):
        # Fixed Radio Button
        self.rb_fixed = QtWidgets.QRadioButton("Fixed Radius:")
        self.le_fixed = QtWidgets.QLineEdit()
        self.le_fixed.setMinimumWidth(150)
        self.le_fixed.setVisible(False)
        self.le_fixed.textEdited.connect(self.le_fixed_text_edited)
        self.rb_fixed.clicked.connect(self.rb_fixed_clicked)

        # QStackedWidget le_fixed
        self.tmp1 = QtWidgets.QWidget()
        self.sw_fixed = QtWidgets.QStackedWidget()
        self.sw_fixed.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                    QtWidgets.QSizePolicy.Fixed)
        self.sw_fixed.addWidget(self.le_fixed)
        self.sw_fixed.addWidget(self.tmp1)
        self.sw_fixed.setCurrentIndex(1)

        # Custom Radio Button + Table
        self.rb_custom = QtWidgets.QRadioButton("Custom:")
        self.tw_cutoff = CutoffTableWidget(self._radii)
        self.tw_cutoff.text_edited.connect(self.tw_cutoff_text_edited)
        self.rb_custom.clicked.connect(self.rb_custom_clicked)

        # Preset Combo Box
        self.cb_preset = CutoffPresetComboBox()
        self.cb_preset.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                     QtWidgets.QSizePolicy.Fixed)
        self.cb_preset.preset_selected.connect(self.cb_preset_selected)

        # History button
        self.pb_history = QtWidgets.QPushButton("History", self)
        self.pb_history.setMinimumWidth(0)
        self.pb_history.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                      QtWidgets.QSizePolicy.Fixed)
        self.pb_history.setAutoDefault(False)
        self.pb_history.clicked.connect(self.pb_history_clicked)
        if len(cutoff_history.filtered_history(self._radii.keys(), preferred_filenames_with_frames=\
                                               self._preferred_filenames_with_frames)) == 0:
            self.pb_history.setVisible(False)

        # Preset save
        self.cb_preset_save = QtWidgets.QCheckBox("Save as Preset", self)
        self.le_preset_save = QtWidgets.QLineEdit()
        self.le_preset_save.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                          QtWidgets.QSizePolicy.Fixed)
        self.le_preset_save.textChanged.connect(self.le_preset_save_changed)

        self.la_main = QtWidgets.QGridLayout()
        self.la_main.setContentsMargins(0, 0, 0, 0)
        self.la_fixed = QtWidgets.QHBoxLayout()
        self.la_fixed.setContentsMargins(0, 0, 0, 0)
        self.la_custom = QtWidgets.QHBoxLayout()
        self.la_custom.setContentsMargins(0, 0, 0, 0)
        self.la_preset_save = QtWidgets.QHBoxLayout()
        self.la_preset_save.setContentsMargins(0, 0, 0, 0)

        self.la_fixed.addWidget(self.rb_fixed)
        self.la_fixed.addWidget(self.sw_fixed)
        self.la_main.addLayout(self.la_fixed, 0, 0, 1, 2)
        self.la_custom.addWidget(self.rb_custom)
        self.la_main.addLayout(self.la_custom, 1, 0, 1, 2)
        self.la_main.addWidget(self.tw_cutoff, 2, 0, 1, 2)
        self.la_main.addWidget(self.cb_preset, 3, 0, 1, 1)
        self.la_main.addWidget(self.pb_history, 3, 1, 1, 1)
        self.la_preset_save.addWidget(self.cb_preset_save)
        self.la_preset_save.addWidget(self.le_preset_save)
        self.la_main.addLayout(self.la_preset_save, 4, 0, 1, 2)

        self.setLayout(self.la_main)

        self.rb_fixed.click()

    def _init_cutoff_radii(self, cutoff_radii=None):
        elements = self._radii.keys()
        if cutoff_radii is None:
            filtered_history = cutoff_history.filtered_history(
                elements,
                preferred_filenames_with_frames=self.
                _preferred_filenames_with_frames)
            if not filtered_history:
                cutoff_radii = config.Computation.std_cutoff_radius
            else:
                cutoff_radii = filtered_history[0].radii
        self.cutoff_radii = cutoff_radii

    def rb_fixed_clicked(self):
        self.sw_fixed.setCurrentIndex(0)
        if self._selected_radii_type != RadiiWidget.RadiiType.FIXED and self._discard_preset_choice_on_next_rb_click:
            self.cb_preset.discard_preset_choice()
            self._selected_radii_type = RadiiWidget.RadiiType.FIXED
        self._discard_preset_choice_on_next_rb_click = True

    def rb_custom_clicked(self):
        self.sw_fixed.setCurrentIndex(1)
        if self._selected_radii_type != RadiiWidget.RadiiType.CUSTOM and self._discard_preset_choice_on_next_rb_click:
            self.cb_preset.discard_preset_choice()
            self._selected_radii_type = RadiiWidget.RadiiType.CUSTOM
        self._discard_preset_choice_on_next_rb_click = True

    def le_fixed_text_edited(self):
        self.cb_preset.discard_preset_choice()

    def tw_cutoff_text_edited(self):
        self.cb_preset.discard_preset_choice()
        self.rb_custom.click()
        self.cb_preset.discard_preset_choice()

    def pb_history_clicked(self):
        cutoff_history_dialog = CutoffHistoryDialog(
            self, self._radii.keys(), self._preferred_filenames_with_frames)
        return_value = cutoff_history_dialog.exec_()
        if return_value == QtWidgets.QDialog.Rejected:
            return
        self._init_cutoff_radii(cutoff_history_dialog.selected_radii)

    def le_preset_save_changed(self, text):
        self.cb_preset_save.setChecked(text.strip() != '')

    def cb_preset_selected(self, selected_preset):
        self.cutoff_radii = selected_preset.radii

    @property
    def save_preset_name(self):
        if not self.cb_preset_save.isChecked():
            return None
        preset_name = self.le_preset_save.text().strip()
        if not re.match('[a-zA-Z0-9_]+', preset_name):
            message = QtWidgets.QMessageBox()
            message.setStandardButtons(QtWidgets.QMessageBox.Ok)
            message.setText(
                "{} is not valid preset name. Only A-Z, a-z, 0-9 and _ are valid characters"
                .format(preset_name))
            message.exec_()
            return None
        return preset_name

    @property
    def cutoff_radii(self):
        if self.rb_fixed.isChecked() and hasattr(self, "le_fixed"):
            try:
                radius_as_text = self.le_fixed.text()
                radius = float(radius_as_text)
                return radius
            except ValueError:
                message = QtWidgets.QMessageBox()
                message.setStandardButtons(QtWidgets.QMessageBox.Ok)
                message.setText("Incorrect input: {}".format(radius_as_text))
                message.exec_()
                raise

        if self.rb_custom.isChecked():
            elem_to_cutoff_radius = {}
            for i, elem in enumerate(self._radii):
                try:
                    current_radius_as_text = self.tw_cutoff.cellWidget(
                        i, 1).text()
                    current_radius = float(current_radius_as_text)
                    elem_to_cutoff_radius[elem] = current_radius
                except ValueError:
                    message = QtWidgets.QMessageBox()
                    message.setStandardButtons(QtWidgets.QMessageBox.Ok)
                    message.setText(
                        "Incorrect input: {}".format(current_radius_as_text))
                    message.exec_()
                    raise
            return elem_to_cutoff_radius

    @cutoff_radii.setter
    def cutoff_radii(self, cutoff_radii):
        elements = self._radii.keys()
        if not isinstance(cutoff_radii, collections.Iterable):
            cutoff_radii = dict(
                (elem, float(cutoff_radii)) for elem in elements)
        # Check if all cutoff radii are equal
        if len(set(cutoff_radii.values())) == 1:
            self._discard_preset_choice_on_next_rb_click = False
            self.rb_fixed.click()
            self.le_fixed.setText(str(cutoff_radii.values()[0]))
        else:
            self._discard_preset_choice_on_next_rb_click = False
            self.rb_custom.click()
            for i, elem in enumerate(self._radii):
                self.tw_cutoff.cellWidget(i,
                                          1).setText(str(cutoff_radii[elem]))
Ejemplo n.º 4
0
class RadiiWidget(QtWidgets.QWidget):
    class RadiiType:
        FIXED = 0
        CUSTOM = 1

    def __init__(self, radii, file_frame_dict, parent=None):
        super(RadiiWidget, self).__init__(parent)
        self._radii = radii
        self._file_frame_dict = file_frame_dict
        self._preferred_filenames_with_frames = dict((os.path.basename(filepath), frames)
                                                     for filepath, frames in self._file_frame_dict.iteritems())
        self._discard_preset_choice_on_next_rb_click = True     # Default value is True
        self._selected_radii_type = RadiiWidget.RadiiType.FIXED
        self._init_ui()
        self._init_cutoff_radii()

    def _init_ui(self):
        # Fixed Radio Button
        self.rb_fixed = QtWidgets.QRadioButton("Fixed Radius:")
        self.le_fixed = QtWidgets.QLineEdit()
        self.le_fixed.setMinimumWidth(150)
        self.le_fixed.setVisible(False)
        self.le_fixed.textEdited.connect(self.le_fixed_text_edited)
        self.rb_fixed.clicked.connect(self.rb_fixed_clicked)

        # QStackedWidget le_fixed
        self.tmp1 = QtWidgets.QWidget()
        self.sw_fixed = QtWidgets.QStackedWidget()
        self.sw_fixed.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        self.sw_fixed.addWidget(self.le_fixed)
        self.sw_fixed.addWidget(self.tmp1)
        self.sw_fixed.setCurrentIndex(1)

        # Custom Radio Button + Table
        self.rb_custom = QtWidgets.QRadioButton("Custom:")
        self.tw_cutoff = CutoffTableWidget(self._radii)
        self.tw_cutoff.text_edited.connect(self.tw_cutoff_text_edited)
        self.rb_custom.clicked.connect(self.rb_custom_clicked)

        # Preset Combo Box
        self.cb_preset = CutoffPresetComboBox()
        self.cb_preset.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        self.cb_preset.preset_selected.connect(self.cb_preset_selected)

        # History button
        self.pb_history = QtWidgets.QPushButton("History", self)
        self.pb_history.setMinimumWidth(0)
        self.pb_history.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        self.pb_history.setAutoDefault(False)
        self.pb_history.clicked.connect(self.pb_history_clicked)
        if len(cutoff_history.filtered_history(self._radii.keys(), preferred_filenames_with_frames=\
                                               self._preferred_filenames_with_frames)) == 0:
            self.pb_history.setVisible(False)

        # Preset save
        self.cb_preset_save = QtWidgets.QCheckBox("Save as Preset", self)
        self.le_preset_save = QtWidgets.QLineEdit()
        self.le_preset_save.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        self.le_preset_save.textChanged.connect(self.le_preset_save_changed)

        self.la_main = QtWidgets.QGridLayout()
        self.la_main.setContentsMargins(0, 0, 0, 0)
        self.la_fixed = QtWidgets.QHBoxLayout()
        self.la_fixed.setContentsMargins(0, 0, 0, 0)
        self.la_custom = QtWidgets.QHBoxLayout()
        self.la_custom.setContentsMargins(0, 0, 0, 0)
        self.la_preset_save = QtWidgets.QHBoxLayout()
        self.la_preset_save.setContentsMargins(0, 0, 0, 0)

        self.la_fixed.addWidget(self.rb_fixed)
        self.la_fixed.addWidget(self.sw_fixed)
        self.la_main.addLayout(self.la_fixed, 0, 0, 1, 2)
        self.la_custom.addWidget(self.rb_custom)
        self.la_main.addLayout(self.la_custom, 1, 0, 1, 2)
        self.la_main.addWidget(self.tw_cutoff, 2, 0, 1, 2)
        self.la_main.addWidget(self.cb_preset, 3, 0, 1, 1)
        self.la_main.addWidget(self.pb_history, 3, 1, 1, 1)
        self.la_preset_save.addWidget(self.cb_preset_save)
        self.la_preset_save.addWidget(self.le_preset_save)
        self.la_main.addLayout(self.la_preset_save, 4, 0, 1, 2)

        self.setLayout(self.la_main)

        self.rb_fixed.click()

    def _init_cutoff_radii(self, cutoff_radii=None):
        elements = self._radii.keys()
        if cutoff_radii is None:
            filtered_history = cutoff_history.filtered_history(elements, preferred_filenames_with_frames=
                                                               self._preferred_filenames_with_frames)
            if not filtered_history:
                cutoff_radii = config.Computation.std_cutoff_radius
            else:
                cutoff_radii = filtered_history[0].radii
        self.cutoff_radii = cutoff_radii

    def rb_fixed_clicked(self):
        self.sw_fixed.setCurrentIndex(0)
        if self._selected_radii_type != RadiiWidget.RadiiType.FIXED and self._discard_preset_choice_on_next_rb_click:
            self.cb_preset.discard_preset_choice()
            self._selected_radii_type = RadiiWidget.RadiiType.FIXED
        self._discard_preset_choice_on_next_rb_click = True

    def rb_custom_clicked(self):
        self.sw_fixed.setCurrentIndex(1)
        if self._selected_radii_type != RadiiWidget.RadiiType.CUSTOM and self._discard_preset_choice_on_next_rb_click:
            self.cb_preset.discard_preset_choice()
            self._selected_radii_type = RadiiWidget.RadiiType.CUSTOM
        self._discard_preset_choice_on_next_rb_click = True

    def le_fixed_text_edited(self):
        self.cb_preset.discard_preset_choice()

    def tw_cutoff_text_edited(self):
        self.cb_preset.discard_preset_choice()
        self.rb_custom.click()
        self.cb_preset.discard_preset_choice()

    def pb_history_clicked(self):
        cutoff_history_dialog = CutoffHistoryDialog(self, self._radii.keys(), self._preferred_filenames_with_frames)
        return_value = cutoff_history_dialog.exec_()
        if return_value == QtWidgets.QDialog.Rejected:
            return
        self._init_cutoff_radii(cutoff_history_dialog.selected_radii)

    def le_preset_save_changed(self, text):
        self.cb_preset_save.setChecked(text.strip() != '')

    def cb_preset_selected(self, selected_preset):
        self.cutoff_radii = selected_preset.radii

    @property
    def save_preset_name(self):
        if not self.cb_preset_save.isChecked():
            return None
        preset_name = self.le_preset_save.text().strip()
        if not re.match('[a-zA-Z0-9_]+', preset_name):
            message = QtWidgets.QMessageBox()
            message.setStandardButtons(QtWidgets.QMessageBox.Ok)
            message.setText("{} is not valid preset name. Only A-Z, a-z, 0-9 and _ are valid characters".format(
                preset_name)
            )
            message.exec_()
            return None
        return preset_name

    @property
    def cutoff_radii(self):
        if self.rb_fixed.isChecked() and hasattr(self, "le_fixed"):
            try:
                radius_as_text = self.le_fixed.text()
                radius = float(radius_as_text)
                return radius
            except ValueError:
                message = QtWidgets.QMessageBox()
                message.setStandardButtons(QtWidgets.QMessageBox.Ok)
                message.setText("Incorrect input: {}".format(radius_as_text))
                message.exec_()
                raise

        if self.rb_custom.isChecked():
            elem_to_cutoff_radius = {}
            for i, elem in enumerate(self._radii):
                try:
                    current_radius_as_text = self.tw_cutoff.cellWidget(i, 1).text()
                    current_radius = float(current_radius_as_text)
                    elem_to_cutoff_radius[elem] = current_radius
                except ValueError:
                    message = QtWidgets.QMessageBox()
                    message.setStandardButtons(QtWidgets.QMessageBox.Ok)
                    message.setText("Incorrect input: {}".format(current_radius_as_text))
                    message.exec_()
                    raise
            return elem_to_cutoff_radius

    @cutoff_radii.setter
    def cutoff_radii(self, cutoff_radii):
        elements = self._radii.keys()
        if not isinstance(cutoff_radii, collections.Iterable):
            cutoff_radii = dict((elem, float(cutoff_radii)) for elem in elements)
        # Check if all cutoff radii are equal
        if len(set(cutoff_radii.values())) == 1:
            self._discard_preset_choice_on_next_rb_click = False
            self.rb_fixed.click()
            self.le_fixed.setText(str(cutoff_radii.values()[0]))
        else:
            self._discard_preset_choice_on_next_rb_click = False
            self.rb_custom.click()
            for i, elem in enumerate(self._radii):
                self.tw_cutoff.cellWidget(i, 1).setText(str(cutoff_radii[elem]))