Tutorial de PyQt5 - Radiobutton

Jinku Hu 30 enero 2023 18 enero 2020
  1. Ejemplo básico de PyQt5 QRadiobutton
  2. Método PyQt5 QRadiobutton setChecked
  3. Grupo QRadiobutton de PyQt5
Tutorial de PyQt5 - Radiobutton

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.

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.

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn