SetChecked radiobutton d'un autre groupe de pyqt

0

La question

J'ai 2 composants radiobutton créé (à l'intérieur d'une classe QMainWindow) comme:

    def dtype_radiobuttons(self):
        layout = QHBoxLayout()
        rb1 = QRadioButton("complex")
        rb1.toggled.connect(lambda: self.update_image("dtype", rb1.text()))


        self.real_dtype_rb = QRadioButton("real", self)
        self.real_dtype_rb.toggled.connect(lambda: self.update_image("dtype", self.real_dtype_rb.text()))

        self.btngroup.append(QButtonGroup())
        self.btngroup[-1].addButton(self.real_dtype_rb)
        self.btngroup[-1].addButton(rb1)

        rb1.setChecked(True)
        layout.addWidget(rb1)
        layout.addWidget(self.real_dtype_rb)
        layout.addStretch()

        return layout

    def library_radiobutton(self):
        layout = QHBoxLayout()
        self.cvnn_library_rb = QRadioButton("cvnn", self)
        self.cvnn_library_rb.toggled.connect(lambda: self.update_image("library", self.cvnn_library_rb.text()))

        rb2 = QRadioButton("tensorflow", self)
        rb2.toggled.connect(lambda: self.update_image("library", rb2.text()))

        self.btngroup.append(QButtonGroup())
        self.btngroup[-1].addButton(rb2)
        self.btngroup[-1].addButton(self.cvnn_library_rb)

        self.cvnn_library_rb.setChecked(True)
        layout.addWidget(self.cvnn_library_rb)
        layout.addWidget(rb2)
        layout.addStretch()

        return layout

Je veux qu'il soit impossible de sélectionner la complex l'option de la dtype radiobuttons groupe et tensorflow radiobutton de la bibliothèque de composants radiobutton. En laissant 3 des 4 combinaisons possibles. Donc, si je sélectionne complex et la bibliothèque a été tensorflowJe veux changer automatiquement la bibliothèque de cvnn. J'ai essayé de l'appliquer comme ceci:

    def update_image(self, key, value):
        if value == "complex":
            if hasattr(self, 'cvnn_library_rb'):    # It wont exists if I still didnt create the radiobutton.
                self.cvnn_library_rb.setChecked(True)   # Set library cvnn
        elif value == "tensorflow":
            if hasattr(self, 'real_dtype_rb'):
                self.real_dtype_rb.setChecked(True)   # Set real dtype
        ... Do the other stuff I need to do.

La chose étrange est que cela fonctionne réellement dans le sens que, par exemple, si je suis sur complex activé et sélectionnez tensorflowle radiobutton modifications real (ce que je veux!) mais tensorflow ne pas être sélectionné! J'ai besoin de sélectionner de nouveau comme si self.real_dtype_rb.setChecked(True) annule la sélection de la case d'option j'ai cliqué sur. (Très bizarre si vous me demandez).


  • L' hasattr est utilisé parce que, selon l'ordre que j'appelle le fonctions, il y a certains composants radiobutton qui sera créé avant les autres, il pourrait ne pas exister.

  • Cette est une option que j'envisage, mais c'est la désactivation de la case d'option groupe au lieu de changer leur état (pas ce que je préfère).

pyqt python qt
2021-11-23 08:48:26
1

La meilleure réponse

1

Le signal toggled est déclenchée à chaque fois que vous modifiez l'état de vos boutons radio. Ainsi, il sera déclenché lorsque vous appelez setChecked (une fois pour le radio bouton à bascule et une fois pour l'autre, vous untoggle) et update_image est appelé est le mauvais cas.

Vous devez vérifier l'état du bouton radio et appel update_image seulement si le bouton radio est activée:

rb2.toggled.connect(lambda state: state and self.update_image("library", rb2.text(), state))
2021-11-23 10:45:03

Il a travaillé! merci!
Agustin Barrachina

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................