SetChecked radiobutton di un altro gruppo di pyqt

0

Domanda

Ho 2 radiobutton creato (all'interno di un QMainWindow classe) come:

    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

Voglio rendere impossibile per selezionare il complex opzione di dimensione tipo radiobutton gruppo e tensorflow radiobutton della biblioteca radiobutton. Lasciando 3 dei 4 possibili combinazioni. Quindi, se devo selezionare complex e la biblioteca è stata tensorflowVoglio cambiare automaticamente la libreria cvnn. Ho cercato di attuare questo modo:

    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 cosa strana è che in realtà funziona, nel senso che, per esempio, se ho un complex attivato e selezionare tensorflowil radiobutton modifiche real (quello che voglio!) ma tensorflow non avere selezionato! Ho bisogno di selezionare di nuovo come se stesse facendo self.real_dtype_rb.setChecked(True) per annullare la selezione dei radiobutton ho cliccato su. (Molto strano se mi chiedete).


  • Il hasattr viene utilizzato, perché a seconda dell'ordine che io chiamo il funzioni, ci sono alcuni pulsanti di opzione che sarà creato prima l'altro, quindi non potrebbe esistere.

  • Questo è un'opzione che sto valutando, ma è disabilitare il componente radiobutton gruppo invece di cambiare il loro stato (e non quello che preferisco).

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

Migliore risposta

1

Il segnale toggled viene attivato ogni volta che si cambia lo stato della vostra radio pulsanti. Così, sarà attivata quando si chiama setChecked (una volta per il pulsante di opzione si attiva e una volta per l'altro si untoggle) e update_image è chiamato è sbagliata caso.

È necessario controllare lo stato del pulsante e chiamata update_image solo se il pulsante di opzione è attivata:

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

Ha funzionato! grazie!
Agustin Barrachina

In altre lingue

Questa pagina è in altre lingue

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