SetChecked radiobutton jiné skupiny pyqt

0

Otázka

Mám 2 radiobuttons vytvořil (uvnitř třídy QMainWindow), jako je:

    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

Chci, aby bylo možné vybrat complex možnost dtype radiobuttons skupina a tensorflow radiobutton knihovny radiobuttons. Takže 3 ze 4 možných kombinací. Takže když jsem si vybrat complex a knihovna byla tensorflowChci, aby se automaticky změnit knihovny cvnn. Snažil jsem se realizovat to, jako toto:

    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á věc je, že to vlastně funguje v tom smyslu, že, například, pokud jsem na complex aktivuje a zvolte tensorflow, radiobutton změny real (to, co chci!) ale tensorflow není vybrán! Potřebuju vybrat to znovu, jako by se dělat self.real_dtype_rb.setChecked(True) zruší výběr radiobutton jsem kliknul na. (Velmi divné, pokud se zeptáte mě).


  • Na hasattr je použit, protože v závislosti na pořadí, zavolám funkce, tam jsou některé radiobuttons, který bude vytvořen před ostatní, takže to nemusí existovat.

  • To je možnost zvažuji, ale to je zakázání radiobutton skupina namísto změny jejich stavu (ne to, co mám nejraději).

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

Nejlepší odpověď

1

Signál toggled je spuštěna vždy, když změníte stav vašeho přepínače. Takže, to spustí, když zavoláte setChecked (jednou pro rádio tlačítko přepínač a jednou pro druhé jste untoggle) a update_image nazývá je špatný případ.

Musíte zkontrolovat stav přepínače a volání update_image pouze pokud je přepínací tlačítko přepnuto:

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

To fungovalo! díky!!!
Agustin Barrachina

V jiných jazycích

Tato stránka je v jiných jazycích

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