SetChecked radiobutton de un alt grup pyqt

0

Problema

Am 2 butoane radio creat (în interiorul unui QMainWindow clasa), cum ar fi:

    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

Vreau pentru a face imposibilă pentru a selecta complex opțiunea de dtype grup de butoane radio și tensorflow radiobutton de biblioteca butoane radio. Lăsând la 3 din cele 4 combinatii posibile. Deci, dacă am selecta complex și bibliotecă, a fost tensorflowVreau pentru a schimba în mod automat în biblioteca pentru a cvnn. Am încercat să-l pună în aplicare astfel:

    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.

Lucru ciudat este că funcționează de fapt, în sensul că, de exemplu, dacă eu sunt pe complex activat și selectați tensorflow, la radiobutton modificări real (ceea ce vreau eu!) dar tensorflow nu-aleasă! Trebuie să selectați din nou ca și cum ar face self.real_dtype_rb.setChecked(True) anulează selecția radiobutton-am făcut clic pe. (Foarte ciudat dacă mă întrebi pe mine).


  • La hasattr este folosit pentru că în funcție de scopul chem funcții, există unele butoane radio care va fi creat înainte de celălalt, așa că nu ar putea exista.

  • Asta este o opțiune am în vedere, dar e dezactivarea radiobutton grup în loc de a schimba starea lor (nu ceea ce prefer eu).

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

Cel mai bun răspuns

1

Semnalul toggled se declanșează ori de câte ori vă schimbați starea de butoane radio. Deci, acesta va fi declanșată atunci când te sun setChecked (o dată pentru radio buton de comutare și o dată pentru alte te untoggle) și update_image este numit este greșit caz.

Trebuie să verificați starea de butonul radio și de apel update_image numai dacă butonul radio este inversate:

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

Ea a lucrat! multumesc!!!
Agustin Barrachina

În alte limbi

Această pagină este în alte limbi

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