示例#1
0
class WidgetNome(QWidget):
    nomeModificado = pyqtSignal(str)
    def __init__(self, texto='', parent=None):
        super().__init__(parent)
        self._configurarGui(texto)

        self._lblNome.visivelModificado.connect(self._mostrarModificarGravar)
        self._lblNome.textoModificado.connect(lambda nome: self.nomeModificado.emit(nome))
        self._btnGravar.clicked.connect(self._lblNome.mudarVisivel)

    def _configurarGui(self, texto):
        layout = QHBoxLayout()
        layout.setAlignment(Qt.AlignLeft)
        layout.setMargin(0)
        
        self._spacer = QSpacerItem(0,0,QSizePolicy.Expanding,QSizePolicy.Maximum)
        self._layoutSpacer = QHBoxLayout()
        self._layoutSpacer.addItem(self._spacer)
        
        lbl = QLabel('Nome: ', self)
        self._lblNome = EditLabel(texto)
        self._btnGravar = QPushButton('Modificar')

        layout.addWidget(lbl)
        layout.addWidget(self._lblNome)
        layout.addLayout(self._layoutSpacer)
        layout.addWidget(self._btnGravar)
        self.setLayout(layout)

    def _mostrarModificarGravar(self):
        if self._lblNome.isVisible():
            self._btnGravar.setText('Modificar')
            self._layoutSpacer.addItem(self._spacer)            
        else:
            self._btnGravar.setText('Gravar')
            self._layoutSpacer.removeItem(self._spacer)

    def getNome(self):
        return self._lblNome.getTexto()

    def setNome(self, nome):
        self._lblNome.setTexto(str(nome))
示例#2
0
class RadioBox(QWidget):
    def __init__(self, parent=None, items=None, spread=True):
        # If spread is False, insert a spacer in the layout so that the items don't use all the
        # space they're given but rather align left.
        if items is None:
            items = []
        QWidget.__init__(self, parent)
        self._buttons = []
        self._labels = items
        self._selected_index = 0
        self._spacer = horizontalSpacer() if not spread else None
        self._layout = QHBoxLayout(self)
        self._update_buttons()

    #--- Private
    def _update_buttons(self):
        if self._spacer is not None:
            self._layout.removeItem(self._spacer)
        to_remove = self._buttons[len(self._labels):]
        for button in to_remove:
            self._layout.removeWidget(button)
            button.setParent(None)
        del self._buttons[len(self._labels):]
        to_add = self._labels[len(self._buttons):]
        for _ in to_add:
            button = QRadioButton(self)
            self._buttons.append(button)
            self._layout.addWidget(button)
            button.toggled.connect(self.buttonToggled)
        if self._spacer is not None:
            self._layout.addItem(self._spacer)
        if not self._buttons:
            return
        for button, label in zip(self._buttons, self._labels):
            button.setText(label)
        self._update_selection()

    def _update_selection(self):
        self._selected_index = max(
            0, min(self._selected_index,
                   len(self._buttons) - 1))
        selected = self._buttons[self._selected_index]
        selected.setChecked(True)

    #--- Event Handlers
    def buttonToggled(self):
        for i, button in enumerate(self._buttons):
            if button.isChecked():
                self._selected_index = i
                self.itemSelected.emit(i)
                break

    #--- Signals
    itemSelected = pyqtSignal(int)

    #--- Properties
    @property
    def buttons(self):
        return self._buttons[:]

    @property
    def items(self):
        return self._labels[:]

    @items.setter
    def items(self, value):
        self._labels = value
        self._update_buttons()

    @property
    def selected_index(self):
        return self._selected_index

    @selected_index.setter
    def selected_index(self, value):
        self._selected_index = value
        self._update_selection()
示例#3
0
class RadioBox(QWidget):
    def __init__(self, parent=None, items=None, spread=True):
        # If spread is False, insert a spacer in the layout so that the items don't use all the
        # space they're given but rather align left.
        if items is None:
            items = []
        QWidget.__init__(self, parent)
        self._buttons = []
        self._labels = items
        self._selected_index = 0
        self._spacer = horizontalSpacer() if not spread else None
        self._layout = QHBoxLayout(self)
        self._update_buttons()
    
    #--- Private
    def _update_buttons(self):
        if self._spacer is not None:
            self._layout.removeItem(self._spacer)
        to_remove = self._buttons[len(self._labels):]
        for button in to_remove:
            self._layout.removeWidget(button)
            button.setParent(None)
        del self._buttons[len(self._labels):]
        to_add = self._labels[len(self._buttons):]
        for _ in to_add:
            button = QRadioButton(self)
            self._buttons.append(button)
            self._layout.addWidget(button)
            button.toggled.connect(self.buttonToggled)
        if self._spacer is not None:
            self._layout.addItem(self._spacer)
        if not self._buttons:
            return
        for button, label in zip(self._buttons, self._labels):
            button.setText(label)
        self._update_selection()
    
    def _update_selection(self):
        self._selected_index = max(0, min(self._selected_index, len(self._buttons)-1))
        selected = self._buttons[self._selected_index]
        selected.setChecked(True)
    
    #--- Event Handlers
    def buttonToggled(self):
        for i, button in enumerate(self._buttons):
            if button.isChecked():
                self._selected_index = i
                self.itemSelected.emit(i)
                break
    
    #--- Signals
    itemSelected = pyqtSignal(int)
    
    #--- Properties
    @property
    def buttons(self):
        return self._buttons[:]
    
    @property
    def items(self):
        return self._labels[:]
    
    @items.setter
    def items(self, value):
        self._labels = value
        self._update_buttons()
    
    @property
    def selected_index(self):
        return self._selected_index
    
    @selected_index.setter
    def selected_index(self, value):
        self._selected_index = value
        self._update_selection()