Tutorial de PyQt5 - Radiobutton

  1. Ejemplo básico de PyQt5 QRadiobutton
  2. Método PyQt5 QRadiobutton setChecked
  3. Grupo QRadiobutton de PyQt5

El QRadiobutton es similar al QCheckbox, excepto que tienes más de una opción pero sólo puedes seleccionar una de ellas a la vez. El widget QRadiobutton tiene también la etiqueta de texto junto con el botón redondo.

Ejemplo básico de PyQt5 QRadiobutton

El siguiente código pregunta en qué ciudad vive y crea dos botones de radio para que el usuario los elija. Muestra el texto en el label después de que el usuario seleccione uno de los botones de radio.

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_())

Ejemplo básico del radiobotón PyQt5 QRadiobutton

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

Creamos dos botones de radio rbtn1 y rbtn2. La cadena entre paréntesis es la etiqueta de texto que se muestra junto al botón de radio redondo.

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

El botón emite la señal toggled cada vez que se selecciona o deselecciona el botón. La función onClicked está conectada a la señal toggled de dos botones de radio.

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

El método self.sender() devuelve el widget que emite la señal y el método isChecked() del widget QRadiobutton es True si ese botón específico está seleccionado, si no, devuelve False.

Podríamos obtener el botón de radio particular que está seleccionado del grupo de botones de radio marcando el método isChecked().

Ejemplo básico del radiobotón PyQt5 QRadiobutton

Método PyQt5 QRadiobutton setChecked

El QRadiobutton no se comprueba por defecto después de ser iniciado. Podríamos cambiar el estado por defecto del botón de radio para que sea Checked durante la inicialización utilizando el método setChecked().

Por ejemplo, añadimos la siguiente línea a los códigos de ejemplo anteriores para comprobar el botón de radio New York.

self.rbtn1.setChecked(True)

Grupo QRadiobutton de PyQt5

Todos los botones de radio en la misma ventana padre están dentro del mismo grupo y esto significa que sólo se puede seleccionar un botón de radio a la vez, incluso las señales toggled están conectadas a diferentes funciones.

El QButtonGroup de QtWidgets agrupa los botones seleccionados y podemos crear múltiples instancias de QButtonGroup para aislar los botones de radio de los diferentes grupos para que se puedan comprobar más botones en el mismo widget padre.

Lo siguiente muestra el ejemplo para pedir al usuario que seleccione tanto la ciudad como el estado de dos grupos de botones de 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_())

Grupo PyQt5 QRadiobutton Radiobutton QButtonGroup

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

Se crean dos grupos de botones para mantener los botones de radio.

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

Los botones de radio de los mismos grupos se añaden al mismo QButtonGroup.