class DownloadOption(QWidget): """ A Widget with download/update/remove options. """ download_clicked = Signal() remove_clicked = Signal() def __init__(self, state=AVAILABLE, parent=None): QWidget.__init__(self, parent) layout = QHBoxLayout() layout.setSpacing(1) layout.setContentsMargins(1, 1, 1, 1) self.checkButton = QCheckBox() layout.addWidget(self.checkButton) self.setLayout(layout) self.setMinimumHeight(20) self.setMaximumHeight(20) self._state = state self._update() @property def state(self): return self._state @state.setter def state(self, state): self._state = state self._update() def _update(self): self.checkButton.setDisabled(False) if self.state == AVAILABLE: self.checkButton.setChecked(False) elif self.state == CURRENT: self.checkButton.setChecked(True) elif self.state == OUTDATED: self.checkButton.setChecked(True) elif self.state == DEPRECATED: self.checkButton.setChecked(True) elif self.state == USER_FILE: self.checkButton.setChecked(False) self.checkButton.setDisabled(True) else: raise ValueError("Invalid state %r" % self.state) try: self.checkButton.clicked.disconnect( ) # Remove old signals if they exist except Exception: pass if not self.checkButton.isChecked( ): # Switch signals if the file is present or not self.checkButton.clicked.connect(self.download_clicked) else: self.checkButton.clicked.connect(self.remove_clicked)