def createEditor(self, parent, option, model_index): assert isinstance(self.parent(), HierarchicalChecklistView) checklist = self.parent().model().get_checklist_from_model_index(model_index) checkbox = QCheckBox(checklist.name, parent=parent) checkbox.setTristate(True) checkbox.stateChanged.connect(partial(self.parent().model().handle_checkstate, model_index)) return checkbox
class BoolConfigControl(ConfigControl): def __init__(self, config_item): ConfigControl.__init__(self, config_item) self._init_ui() self.update_from_config() def _init_ui(self): lbl_bool = QLabel(self._config_item.tag()) lbl_bool.setFixedWidth(self.LABEL_WIDTH) self._chk_box = QCheckBox() self._chk_box.setTristate(False) hbox = QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.addWidget(lbl_bool) hbox.addWidget(self._chk_box) hbox.addStretch() self.setLayout(hbox) def update_from_config(self): state = 2 if self._config_item.value() == True else 0 self._chk_box.setCheckState(state) def save_to_config(self): value = True if self._chk_box.checkState() == 2 else False self._config_item.set(value)
def add_checkbox(self, layout, propriete, titre): objets = [objet for objet in self.objets if objet.style(propriete) is not None] if objets: cb = QCheckBox(titre) cb.setTristate(True) layout.addWidget(cb) verifies = [objet.style(propriete) is True for objet in objets] if not any(verifies): etat = Qt.Unchecked elif all(verifies): etat = Qt.Checked else: etat = Qt.PartiallyChecked cb.setCheckState(etat) cb.stateChanged.connect(partial(self.checked, propriete)) cb.stateChanged.connect(partial(cb.setTristate, False))
class CheckBox(HelpedWidget): """A checbox widget for booleans. The data structure expected and sent to the getter and setter is a boolean.""" def __init__(self, model, check_label="Do this", help_link="", show_label=True, alt_label=None, default_check_state=True): """Construct a checkbox widget for booleans""" HelpedWidget.__init__(self, check_label, help_link) if show_label: if alt_label != None: self.check = QCheckBox(alt_label, self) else: self.check = QCheckBox(check_label, self) else: self.check = QCheckBox(self) self.check.setTristate(False) self.check.setChecked(default_check_state) self.connect(self.check, QtCore.SIGNAL('stateChanged(int)'), self.contentsChanged) if not show_label: layout = QHBoxLayout() layout.addWidget(self.check) layout.setAlignment(Qt.AlignCenter) layout.setContentsMargins(0, 0, 0, 0) self.addLayout(layout) else: self.addWidget(self.check) assert isinstance(model, BooleanModelMixin) self.model = model self.model.observable().attach( BooleanModelMixin.BOOLEAN_VALUE_CHANGED_EVENT, self.modelChanged) self.modelChanged() def contentsChanged(self): """Called whenever the contents of the checbox changes.""" self.model.setTrue(self.check.isChecked()) def modelChanged(self): """Retrives data from the model and sets the state of the checkbox.""" self.check.setChecked(self.model.isTrue())
class CheckBox(HelpedWidget): """A checbox widget for booleans. The data structure expected and sent to the getter and setter is a boolean.""" def __init__(self, model, label="Checkbox", help_link="", show_label=True, alt_label=None, default_check_state=True): """Construct a checkbox widget for booleans""" HelpedWidget.__init__(self, label, help_link) if show_label: if alt_label is not None: self.check = QCheckBox(alt_label, self) else: self.check = QCheckBox(label,self) else: self.check = QCheckBox(self) self.check.setTristate(False) self.check.setChecked(default_check_state) self.connect(self.check, QtCore.SIGNAL('stateChanged(int)'), self.contentsChanged) if not show_label: layout = QHBoxLayout() layout.addWidget(self.check) layout.setAlignment(Qt.AlignCenter) layout.setContentsMargins(0, 0, 0, 0) self.addLayout(layout) else: self.addWidget(self.check) assert isinstance(model, BooleanModelMixin) self.model = model self.model.observable().attach(BooleanModelMixin.BOOLEAN_VALUE_CHANGED_EVENT, self.modelChanged) self.modelChanged() def contentsChanged(self): """Called whenever the contents of the checbox changes.""" self.model.setState(self.check.isChecked()) def modelChanged(self): """Retrives data from the model and sets the state of the checkbox.""" self.check.setChecked(self.model.isTrue())
class ControlForm(QtGui.QDialog): def __init__(self, proxy, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.proxy = proxy self.proxy.lights_on_changed.connect(self.object_lights_on_changed) self.proxy.door_open_changed.connect(self.object_door_open_changed) self.proxy.color_changed.connect(self.object_color_changed) def on_lights_on_changed(self, value): proxy.lights_on = self.lights.isChecked() def on_door_open_changed(self, value): proxy.door_open = self.door_open.isChecked() def object_lights_on_changed(self, value, old_value, other): if value == self.lights.isChecked(): return self.lights.setChecked(value) def object_door_open_changed(self, value, old_value, other): if value == self.door_open.isChecked(): return self.door_open.setChecked(value) def object_color_changed(self, value, old_value, other): if value == self.color.text(): return self.color.setText(value) self.color.textChanged.emit(value) def on_color_text_changed(self, value): self.color_box.setStyleSheet("QLabel { background-color: %s }" % value) def setupUi(self, parent): self.resize(275, 172) self.setWindowTitle('House') self.layout = QVBoxLayout(parent) self.layout.setSizeConstraint(QLayout.SetFixedSize) #align = (Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self.layout1 = QHBoxLayout() self.label1 = QLabel() self.label1.setMinimumSize(QSize(100, 0)) self.label1.setText('Lights:') self.lights = QCheckBox() self.lights.setTristate(False) self.layout1.addWidget(self.label1) self.layout1.addWidget(self.lights) self.layout2 = QHBoxLayout() self.label2 = QLabel() self.label2.setMinimumSize(QSize(100, 0)) self.label2.setText('Front door:') self.door_open = QCheckBox() self.door_open.setTristate(False) self.layout2.addWidget(self.label2) self.layout2.addWidget(self.door_open) self.layout3 = QHBoxLayout() self.label3 = QLabel() self.label3.setMinimumSize(QSize(100, 0)) self.label3.setText('Color:') self.color = QLineEdit() self.color.setReadOnly(True) self.color.textChanged.connect(self.on_color_text_changed) self.color_box = QLabel() self.color_box.setText(' ') self.layout3.addWidget(self.label3) self.layout3.addWidget(self.color) self.layout3.addWidget(self.color_box) self.lights.stateChanged.connect(self.on_lights_on_changed) self.door_open.stateChanged.connect(self.on_door_open_changed) self.layout.addLayout(self.layout1) self.layout.addLayout(self.layout2) self.layout.addLayout(self.layout3)
class CustomAttributes(QGroupBox): changed = pyqtSignal() def __init__(self, parent=None): super(CustomAttributes, self).__init__(parent) grid = QGridLayout() self.setLayout(grid) self.toplabel = QLabel() self.toplabel.setEnabled(False) self.toplabel.setAlignment(Qt.AlignCenter) grid.addWidget(self.toplabel, 0, 0, 1, 3) self.textColor = ColorButton() l = self.textLabel = QLabel() l.setBuddy(self.textColor) grid.addWidget(l, 1, 0) grid.addWidget(self.textColor, 1, 1) c = ClearButton(iconSize=QSize(16, 16)) c.clicked.connect(self.textColor.clear) grid.addWidget(c, 1, 2) self.backgroundColor = ColorButton() l = self.backgroundLabel = QLabel() l.setBuddy(self.backgroundColor) grid.addWidget(l, 2, 0) grid.addWidget(self.backgroundColor, 2, 1) c = ClearButton(iconSize=QSize(16, 16)) c.clicked.connect(self.backgroundColor.clear) grid.addWidget(c, 2, 2) self.bold = QCheckBox() self.italic = QCheckBox() self.underline = QCheckBox() grid.addWidget(self.bold, 3, 0) grid.addWidget(self.italic, 4, 0) grid.addWidget(self.underline, 5, 0) self.underlineColor = ColorButton() grid.addWidget(self.underlineColor, 5, 1) c = ClearButton(iconSize=QSize(16, 16)) c.clicked.connect(self.underlineColor.clear) grid.addWidget(c, 5, 2) grid.setRowStretch(6, 2) self.textColor.colorChanged.connect(self.changed) self.backgroundColor.colorChanged.connect(self.changed) self.underlineColor.colorChanged.connect(self.changed) self.bold.stateChanged.connect(self.changed) self.italic.stateChanged.connect(self.changed) self.underline.stateChanged.connect(self.changed) app.translateUI(self) def translateUI(self): self.textLabel.setText(_("Text")) self.backgroundLabel.setText(_("Background")) self.bold.setText(_("Bold")) self.italic.setText(_("Italic")) self.underline.setText(_("Underline")) def setTopText(self, text): self.toplabel.setText(text) def setTristate(self, enable): self._tristate = enable self.bold.setTristate(enable) self.italic.setTristate(enable) self.underline.setTristate(enable) def textFormat(self): """Returns our settings as a QTextCharFormat object.""" f = QTextCharFormat() if self._tristate: value = lambda checkbox: [False, None, True][checkbox.checkState()] else: value = lambda checkbox: checkbox.isChecked() res = value(self.bold) if res is not None: f.setFontWeight(QFont.Bold if res else QFont.Normal) res = value(self.italic) if res is not None: f.setFontItalic(res) res = value(self.underline) if res is not None: f.setFontUnderline(res) if self.textColor.color().isValid(): f.setForeground(self.textColor.color()) if self.backgroundColor.color().isValid(): f.setBackground(self.backgroundColor.color()) if self.underlineColor.color().isValid(): f.setUnderlineColor(self.underlineColor.color()) return f def setTextFormat(self, f): """Sets our widget to the QTextCharFormat settings.""" block = self.blockSignals(True) absent = Qt.PartiallyChecked if self._tristate else Qt.Unchecked if f.hasProperty(QTextFormat.FontWeight): self.bold.setChecked(f.fontWeight() >= QFont.Bold) else: self.bold.setCheckState(absent) if f.hasProperty(QTextFormat.FontItalic): self.italic.setChecked(f.fontItalic()) else: self.italic.setCheckState(absent) if f.hasProperty(QTextFormat.TextUnderlineStyle): self.underline.setChecked(f.fontUnderline()) else: self.underline.setCheckState(absent) if f.hasProperty(QTextFormat.ForegroundBrush): self.textColor.setColor(f.foreground().color()) else: self.textColor.setColor(QColor()) if f.hasProperty(QTextFormat.BackgroundBrush): self.backgroundColor.setColor(f.background().color()) else: self.backgroundColor.setColor(QColor()) if f.hasProperty(QTextFormat.TextUnderlineColor): self.underlineColor.setColor(f.underlineColor()) else: self.underlineColor.setColor(QColor()) self.blockSignals(block)