Tutorial de PyQt5 - Radiobutton
-
Ejemplo básico de PyQt5
QRadiobutton
-
Método PyQt5
QRadiobutton
setChecked
-
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.
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_())
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()
.
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_())
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
.
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 Facebook