PyQt5 Tutorial - Radiobutton

  1. PyQt5 QRadiobutton Esempio di base
  2. PyQt5 QRadiobutton setChecked Metodo setChecked
  3. PyQt5 QRadiobutton Group

QRadiobutton è simile al QCheckbox, tranne per il fatto che si ha più di una scelta, ma è possibile selezionarne solo una alla volta. Il widget QRadiobutton ha anche l’etichetta di testo insieme al pulsante radio rotondo.

PyQt5 QRadiobutton Esempio di base

Il codice sottostante chiede in quale città si vive e crea due pulsanti radio che l’utente può scegliere. Mostra il testo in label dopo che l’utente ha selezionato uno dei pulsanti di opzione.

QRadiobutton Basic Example.py
import sys
from PyQt5.QtWidgets import (QLabel, QRadioButton, QPushButton, QVBoxLayout, QApplication, QWidget)


class basicRadiobuttonExample(QWidget):

    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        self.label = QLabel('Which city do you live in?')
        self.rbtn1 = QRadioButton('New York')
        self.rbtn2 = QRadioButton('Houston')
        self.label2 = QLabel("")
        
        self.rbtn1.toggled.connect(self.onClicked)
        self.rbtn2.toggled.connect(self.onClicked)

        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.rbtn1)
        layout.addWidget(self.rbtn2)
        layout.addWidget(self.label2)
        
        self.setGeometry(200, 200, 300, 150)

        self.setLayout(layout)
        self.setWindowTitle('PyQt5 Radio Button Example')

        

        self.show()

    def onClicked(self):
        radioBtn = self.sender()
        if radioBtn.isChecked():
            self.label2.setText("You live in " + radioBtn.text())


if __name__ == '__main__':    
    app = QApplication(sys.argv)
    ex = basicRadiobuttonExample()
    sys.exit(app.exec_())

PyQt5 QRadiobutton Radiobutton Esempio di base

self.rbtn1 = QRadioButton('New York')
self.rbtn2 = QRadioButton('Houston')

Creiamo due pulsanti radio rbtn1 e rbtn2. La stringa tra parentesi è l’etichetta di testo mostrata accanto al radio button rotondo.

self.rbtn1.toggled.connect(self.onClicked)
self.rbtn2.toggled.connect(self.onClicked)

Il pulsante emette il segnale toggled ogni volta che il pulsante viene selezionato o deselezionato. La funzione onClicked è collegata al segnale toggled di due radio button.

def onClicked(self):
    radioBtn = self.sender()
    if radioBtn.isChecked():
        self.label2.setText("You live in " + radioBtn.text())

self.sender() restituisce il widget che emette il segnale e il metodo isChecked() nel widget QRadiobutton è True se quello specifico pulsante è selezionato, altrimenti restituisce False.

Potremmo ottenere il particolare radio button selezionato dal gruppo di radio button controllando il metodo isChecked().

PyQt5 QRadiobutton QRadiobutton Radiobutton Esempio di base

PyQt5 QRadiobutton setChecked Metodo setChecked

Il QRadiobutton non viene controllato di default dopo che è stato avviato. Potremmo cambiare il default dello stato del radio button da Checked durante l’inizializzazione usando il metodo setChecked().

Per esempio, aggiungiamo la riga sottostante ai codici di esempio sopra riportati per controllare il radio button New York.

self.rbtn1.setChecked(True)

PyQt5 QRadiobutton Group

Tutti i pulsanti radio nella stessa finestra genitore sono all’interno dello stesso gruppo e ciò significa che si può selezionare un solo pulsante radio alla volta anche i segnali toggled sono collegati a funzioni diverse.

QButtonGroup da QtWidgets raggruppa i pulsanti selezionati insieme e si possono creare più istanze di QButtonGroup per isolare i pulsanti radio da gruppi diversi in modo che più pulsanti possano essere controllati nello stesso widget padre.

Di seguito viene mostrato l’esempio per chiedere all’utente di selezionare sia la città che lo stato da due gruppi di pulsanti radio.

import sys
from PyQt5.QtWidgets import (QLabel, QRadioButton, 
                             QPushButton, QVBoxLayout, 
                             QApplication, QWidget, 
                             QButtonGroup)


class basicRadiobuttonExample(QWidget):

    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        self.label = QLabel('Which city do you live in?')
        self.rbtn1 = QRadioButton('New York')
        self.rbtn2 = QRadioButton('Houston')
        self.label2 = QLabel("")
        
        self.label3 = QLabel('Which state do you live in?')
        self.rbtn3 = QRadioButton('New York')
        self.rbtn4 = QRadioButton('Texas')
        self.label4 = QLabel("")
        
        self.btngroup1 = QButtonGroup()
        self.btngroup2 = QButtonGroup()
        
        self.btngroup1.addButton(self.rbtn1)
        self.btngroup1.addButton(self.rbtn2)
        self.btngroup2.addButton(self.rbtn3)
        self.btngroup2.addButton(self.rbtn4)
        
        self.rbtn1.toggled.connect(self.onClickedCity)
        self.rbtn2.toggled.connect(self.onClickedCity)
        
        self.rbtn3.toggled.connect(self.onClickedState)
        self.rbtn4.toggled.connect(self.onClickedState)        
        

        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.rbtn1)
        layout.addWidget(self.rbtn2)
        layout.addWidget(self.label2)
        
        layout.addWidget(self.label3)
        layout.addWidget(self.rbtn3)
        layout.addWidget(self.rbtn4)
        layout.addWidget(self.label4)
        
        self.setGeometry(200, 200, 300, 300)

        self.setLayout(layout)
        self.setWindowTitle('PyQt5 Radio Button Example')        

        self.show()

    def onClickedCity(self):
        radioBtn = self.sender()
        if radioBtn.isChecked():
            self.label2.setText("You live in " + radioBtn.text())
            
    def onClickedState(self):
        radioBtn = self.sender()
        if radioBtn.isChecked():
            self.label4.setText("You live in " + radioBtn.text())


if __name__ == '__main__':    
    app = QApplication(sys.argv)
    ex = basicRadiobuttonExample()
    sys.exit(app.exec_())

PyQt5 QRadiobutton QRadiobutton Gruppo QButtonGroup

self.btngroup1 = QButtonGroup()
self.btngroup2 = QButtonGroup()

Vengono creati due gruppi di pulsanti per tenere premuti i pulsanti radio.

self.btngroup1.addButton(self.rbtn1)
self.btngroup1.addButton(self.rbtn2)
self.btngroup2.addButton(self.rbtn3)
self.btngroup2.addButton(self.rbtn4)

I pulsanti di opzione degli stessi gruppi vengono aggiunti allo stesso QButtonGroup.