SetChecked radiobutton de outro grupo pyqt

0

Pergunta

Eu tenho 2 radiobuttons criou (dentro de um QMainWindow classe) 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

Eu quero fazer é impossível para selecionar o complex opção de dtype radiobuttons grupo e tensorflow radiobutton da biblioteca radiobuttons. Deixando 3 das 4 combinações possíveis. Então, se eu selecionar complex e a biblioteca foi tensorflow, Eu quero mudar automaticamente a biblioteca cvnn. Eu tentei implementá-lo assim:

    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.

O mais estranho é que ele realmente funciona, no sentido de que, por exemplo, se eu estou em complex ativado e selecione tensorflowo radiobutton alterações real (o que eu quero!) mas tensorflow não seja selecionado! Eu preciso selecioná-lo novamente como se estivesse a fazer self.real_dtype_rb.setChecked(True) cancela a seleção do radiobutton, cliquei. (Muito estranho se você me perguntar).


  • O hasattr é usado porque dependendo da ordem que eu chame a funções, existem alguns radiobuttons que vai ser criado antes o outro, por isso não pode existir.

  • Este é uma opção que eu estou pensando, mas é desabilitar o botão de opção grupo em vez de alterar o seu estado (não o que eu prefiro).

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

Melhor resposta

1

O sinal de toggled é acionado sempre que você alterar o estado de seus botões de rádio. Então, ele vai ser ativado quando você chamar setChecked (uma vez para a rádio botão de alternância e uma vez para o outro você untoggle) e update_image é chamado é o errado caso.

Você tem que verificar o estado do botão de rádio e chamada de update_image só se o botão de rádio é alternada:

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

Ele trabalhou! obrigado!
Agustin Barrachina

Em outros idiomas

Esta página está em outros idiomas

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