PyQt5 Tutorial - Radiobutton

  1. PyQt5 QRadiobutton Exemplo Básico
  2. PyQt5 QRadiobutton setChecked Método
  3. PyQt5 QRadiobutton Grupo

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.

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 Exemplo Básico de Radiobutton

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 Radiobutton Exemplo Básico de Botões de Rádio

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

PyQt5 QRadiobutton Radiobutton QButtonGroup Grupo de Rádios

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.