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"