PyQt5 Tutorial - Radiobutton

Jinku Hu 15 fevereiro 2024
  1. PyQt5 QRadiobutton Exemplo Básico
  2. PyQt5 QRadiobutton setChecked Método
  3. PyQt5 QRadiobutton Grupo
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_())

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.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
Autor: 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 Facebook