SetChecked radiobutton de otro grupo de pyqt

0

Pregunta

Tengo 2 botones de radio creado (en el interior de un QMainWindow clase) como:

    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

Quiero hacer que sea imposible para seleccionar el complex la opción de la dtype grupo de botones de radio y tensorflow radiobutton de la biblioteca de botones de radio. Dejando de 3 de las 4 combinaciones posibles. Así que si yo seleccione complex y la biblioteca fue tensorflowQuiero cambiar automáticamente a la biblioteca cvnn. Traté de implementar algo como esto:

    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.

Lo extraño es que realmente funciona en el sentido de que, por ejemplo, si estoy en complex activado y seleccione tensorflowel radiobutton cambios real (lo que yo quiero!) pero tensorflow no es seleccionado! Tengo que seleccionar de nuevo como si la realización de self.real_dtype_rb.setChecked(True) cancela la selección de la opción que se hace clic en. (Muy raro si me preguntan a mí).


  • El hasattr se utiliza debido a que dependiendo del orden en el que yo llamo el funciones, hay algunos botones de radio que va a ser creado antes el otro, así que es posible que no exista.

  • Este es una opción que estoy considerando, pero es deshabilitar el botón de radio grupo en lugar de cambiar su estado (no lo que yo prefiero).

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

Mejor respuesta

1

La señal toggled se activa cada vez que cambia el estado de los botones de radio. Por lo tanto, será activada en el momento de la llamada setChecked (una vez el botón de radio de cambiar y de una vez por el otro, desactivar) y update_image se llama, es el mal caso.

Usted tiene que comprobar el estado de los botones de radio, y de la llamada update_image sólo si el botón se activa:

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

Funcionó! gracias!
Agustin Barrachina

En otros idiomas

Esta página está en otros idiomas

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