PyQt5 Tutorial - Radiobutton
O QRadiobutton
é similar ao QCheckbox
exceto que você tem mais de uma escolha, mas só pode selecionar uma delas de cada vez. O widget QRadiobutton
também tem a etiqueta de texto junto com o botão de rádio redondo.
PyQt5 QRadiobutton
Exemplo Básico
O código abaixo pergunta em que cidade você mora e cria dois botões de rádio para o usuário escolher. Ele exibe o texto label depois que o usuário seleciona um dos botões de rádio.
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")
Criamos dois botões de rádio rbtn1
e rbtn2
. A string entre parênteses é a etiqueta de texto mostrada ao lado do botão redondo do rádio.
self.rbtn1.toggled.connect(self.onClicked)
self.rbtn2.toggled.connect(self.onClicked)
O botão emite o sinal toggled
toda vez que o botão é selecionado ou desmarcado. A função onClicked
está ligada ao sinal toggled
de dois botões de rádio.
def onClicked(self):
radioBtn = self.sender()
if radioBtn.isChecked():
self.label2.setText("You live in " + radioBtn.text())
O self.sender()
retorna o widget que emite o sinal e o método isChecked()
no widget QRadiobutton
é True
se aquele botão específico for selecionado, caso contrário ele retorna False
.
Nós poderíamos obter o botão de rádio específico que é selecionado do grupo de botões de rádio verificando o método isChecked()
.
PyQt5 QRadiobutton
setChecked
Método
O QRadiobutton
não é verificado por padrão após ter sido iniciado. Nós poderíamos alterar o estado padrão do botão de rádio a ser Checked
durante a inicialização utilizando o método setChecked()
.
Por exemplo, adicionamos a linha abaixo aos códigos de exemplo acima para verificar o botão de rádio New York
.
self.rbtn1.setChecked(True)
PyQt5 QRadiobutton
Grupo
Todos os botões de rádio na mesma janela pai estão dentro do mesmo grupo e isso significa que apenas um botão de rádio pode ser selecionado de cada vez, mesmo os sinais toggled
estão conectados a diferentes funções.
O QButtonGroup
de QtWidgets
agrupa os botões selecionados e podemos criar múltiplas instâncias de QButtonGroup
para isolar botões de rádio de diferentes grupos, para que mais botões possam ser verificados no mesmo widget pai.
O exemplo a seguir mostra o exemplo para pedir ao usuário para selecionar a cidade e o estado de dois grupos de botões de rádio.
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()
Dois grupos de botões são criados para segurar os botões do rádio.
self.btngroup1.addButton(self.rbtn1)
self.btngroup1.addButton(self.rbtn2)
self.btngroup2.addButton(self.rbtn3)
self.btngroup2.addButton(self.rbtn4)
Os botões de rádio nos mesmos grupos são adicionados ao mesmo 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