Tutoriel PyQt5 - Bouton radio

Jinku Hu 30 janvier 2023
  1. PyQt5 QRadiobutton Exemple de base
  2. PyQt5 QRadiobutton setChecked Méthode
  3. Groupe PyQt5 QRadiobutton
Tutoriel PyQt5 - Bouton radio

QRadiobutton est similaire au QCheckbox sauf que vous avez plus d’un choix mais vous ne pouvez en sélectionner qu’un seul à la fois. Le widget QRadiobutton a aussi le label texte ainsi que le bouton radio rond.

PyQt5 QRadiobutton Exemple de base

Le code ci-dessous demande dans quelle ville vous habitez et crée deux boutons radio pour que l’utilisateur puisse choisir. Il affiche le texte dans le label après que l’utilisateur ait sélectionné un des boutons 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_())

PyQt5 QRadio-bouton Bouton radio Exemple de base

self.rbtn1 = QRadioButton("New York")
self.rbtn2 = QRadioButton("Houston")

Nous créons deux boutons radio rbtn1 et rbtn2. La chaîne de caractères entre parenthèses est l’étiquette de texte affichée à côté du bouton radio rond.

self.rbtn1.toggled.connect(self.onClicked)
self.rbtn2.toggled.connect(self.onClicked)

Le bouton émet le signal toggled chaque fois que le bouton est sélectionné ou désélectionné. La fonction onClicked est connectée au signal toggled de deux boutons radio.

def onClicked(self):
    radioBtn = self.sender()
    if radioBtn.isChecked():
        self.label2.setText("You live in " + radioBtn.text())

La méthode self.sender() retourne le widget qui émet le signal et isChecked() dans le widget QRadiobutton est True si ce bouton spécifique est sélectionné, sinon elle retourne False.

Nous pourrions obtenir le bouton radio particulier qui est sélectionné dans le groupe de boutons radio en vérifiant la méthode isChecked().

PyQt5 QRadiobutton Bouton radio Exemple de base

PyQt5 QRadiobutton setChecked Méthode

Le QRadiobutton n’est pas coché par défaut après son initialisation. Nous pourrions changer l’état par défaut du bouton radio à être Checked pendant l’initialisation en utilisant la méthode setChecked().

Par exemple, nous ajoutons la ligne ci-dessous aux exemples de codes ci-dessus pour vérifier le bouton radio New York.

self.rbtn1.setChecked(True)

Groupe PyQt5 QRadiobutton

Tous les boutons radio dans la même fenêtre parent sont dans le même groupe et cela signifie qu’un seul bouton radio peut être sélectionné à la fois, même les signaux toggled sont connectés à des fonctions différentes.

QButtonGroup’ de QtWidgets regroupe les boutons sélectionnés ensemble et nous pourrions créer plusieurs instances de QButtonGroup pour isoler les boutons radio de différents groupes afin que plus de boutons puissent être cochés dans le même widget parent.

L’exemple suivant montre comment demander à l’utilisateur de sélectionner à la fois la ville et l’état à partir de deux groupes de boutons 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_())

PyQt5 QRadiobutton Radiobutton QButtonGroup Groupe de boutons radio

self.btngroup1 = QButtonGroup()
self.btngroup2 = QButtonGroup()

Deux groupes de boutons sont créés pour maintenir les cases d’option.

self.btngroup1.addButton(self.rbtn1)
self.btngroup1.addButton(self.rbtn2)
self.btngroup2.addButton(self.rbtn3)
self.btngroup2.addButton(self.rbtn4)

Les boutons radio des mêmes groupes sont ajoutés au même QButtonGroup.

Auteur: 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