PyQt - Widget QCheckBox
Quando un file QCheckBoxl'oggetto viene aggiunto alla finestra padre. Proprio come QRadioButton, è anche un pulsante selezionabile. Il suo uso comune è in uno scenario in cui all'utente viene chiesto di scegliere una o più delle opzioni disponibili.
A differenza dei pulsanti di opzione, le caselle di controllo non si escludono a vicenda per impostazione predefinita. Per limitare la scelta a uno degli elementi disponibili, le caselle di controllo devono essere aggiunte a QButtonGroup.
La tabella seguente elenca i metodi di classe QCheckBox comunemente usati -
Sr.No. | Metodi e descrizione |
---|---|
1 | setChecked() Modifica lo stato del pulsante della casella di controllo |
2 | setText() Imposta l'etichetta associata al pulsante |
3 | text() Recupera la didascalia del pulsante |
4 | isChecked() Controlla se il pulsante è selezionato |
5 | setTriState() Non fornisce lo stato di modifica alla casella di controllo |
Ogni volta che una casella di controllo viene selezionata o deselezionata, l'oggetto emette il segnale stateChanged ().
Esempio
Qui, due oggetti QCheckBox vengono aggiunti a un layout orizzontale. Il loro segnale stateChanged () è connesso alla funzione btnstate (). L'oggetto sorgente del segnale viene passato alla funzione utilizzando lambda.
self.b1.stateChanged.connect(lambda:self.btnstate(self.b1))
self.b2.toggled.connect(lambda:self.btnstate(self.b2))
La funzione isChecked () viene utilizzata per verificare se il pulsante è selezionato o meno.
if b.text() == "Button1":
if b.isChecked() == True:
print b.text()+" is selected"
else:
print b.text()+" is deselected"
Il codice completo è il seguente:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class checkdemo(QWidget):
def __init__(self, parent = None):
super(checkdemo, self).__init__(parent)
layout = QHBoxLayout()
self.b1 = QCheckBox("Button1")
self.b1.setChecked(True)
self.b1.stateChanged.connect(lambda:self.btnstate(self.b1))
layout.addWidget(self.b1)
self.b2 = QCheckBox("Button2")
self.b2.toggled.connect(lambda:self.btnstate(self.b2))
layout.addWidget(self.b2)
self.setLayout(layout)
self.setWindowTitle("checkbox demo")
def btnstate(self,b):
if b.text() == "Button1":
if b.isChecked() == True:
print b.text()+" is selected"
else:
print b.text()+" is deselected"
if b.text() == "Button2":
if b.isChecked() == True:
print b.text()+" is selected"
else:
print b.text()+" is deselected"
def main():
app = QApplication(sys.argv)
ex = checkdemo()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Come accennato in precedenza, i pulsanti checkBox possono essere resi mutuamente esclusivi aggiungendoli nell'oggetto QButtonGroup.
self.bg = QButtonGroup()
self.bg.addButton(self.b1,1)
self.bg.addButton(self.b2,2)
Oggetto QButtonGroup, fornisce un contenitore astratto per i pulsanti e non ha una rappresentazione visiva. Emette il segnale buttonCliked () e invia il riferimento dell'oggetto Button alla funzione slot btngroup ().
self.bg.buttonClicked[QAbstractButton].connect(self.btngroup)
La funzione btngroup () mostra la didascalia della casella di controllo cliccata.
def btngroup(self,btn):
print btn.text()+" is selected"