SetChecked radiobutton inej skupiny pyqt

0

Otázka

Mám 2 radiobuttons vytvorené (vo vnútri QMainWindow triedy), ako napríklad:

    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

Chcem, aby bolo možné vybrať complex možnosť dtype radiobuttons skupiny a tensorflow radiobutton knižnice radiobuttons. Opúšťa 3 zo 4 možných kombinácií. Takže ak som vyberte complex a knižnica bola tensorflowSom chcete automaticky zmeniť knižnice cvnn. Snažil som sa, aby ho, ako je tento:

    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.

Divný vec je, že to skutočne funguje v tom zmysle, že, napríklad, ak som na complex aktívne a vyberte tensorflowsa radiobutton zmeny real (čo chcem!) ale tensorflow nie si vybrali! Potrebujem ho vyberte opäť ako v prípade tvorby self.real_dtype_rb.setChecked(True) zruší výber radiobutton som klikol na. (Veľmi zvláštne, ak sa spýtate mňa).


  • Na hasattr je používané, pretože v závislosti od toho, aby som volať funkcie, tam sú niektoré radiobuttons, že budú vytvorené pred ostatní, takže to nemusí existovať.

  • Toto je možnosť uvažujem, ale je to vypnutie radiobutton skupina namiesto zmeny ich stavu (nie to, čo mám najradšej).

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

Najlepšiu odpoveď

1

Signál toggled hra je aktivovaná vždy, keď zmeníte stav prepínačov. Tak, to bude aktivovaná, keď sa budete volať setChecked (raz za rádio tlačidla môžete prepínať a raz pre iných ste untoggle) a update_image je nazývaný je zlé veci.

Budete musieť skontrolovať stav prepínač a zavolať update_image iba ak je prepínač je nastavenie prepnuté:

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

Fungovalo to! vďaka!
Agustin Barrachina

V iných jazykoch

Táto stránka je v iných jazykoch

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