Başka bir pyqt grubunun setChecked radyo düğmesi

0

Soru

2 Radyo düğmesi oluşturdum (bir QMainWindow sınıfının içinde) :

    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

Ben imkansız seçmek için yapmak istiyorum complex dtype radiobuttons grubunun seçeneği ve tensorflow kütüphane radiobuttons list. 4 Olası kombinasyondan 3'ünü bırakmak. Yani eğer seçersem complex ve kütüphane tensorflow, Kütüphaneyi otomatik olarak değiştirmek istiyorum cvnn. Bunu şu şekilde uygulamaya çalıştım:

    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.

Garip olan şu ki, aslında, örneğin, eğer açıksam complex etkinleştirildi ve seç tensorflow, radiobutton için değiştirir real (ne istiyorum!) ama tensorflow seçilemiyor! Sanki yapıyormuş gibi tekrar seçmem gerekiyor. self.real_dtype_rb.setChecked(True) tıklattığım radyo düğmesinin seçimini iptal eder. (Bana sorarsan çok garip).


  • Bu hasattr kullanılır çünkü siparişe bağlı olarak fonksiyonlar, daha önce oluşturulacak bazı radyo düğmeleri vardır diğeri, yani var olmayabilir.

  • Bu düşündüğüm bir seçenek ama radyo düğmesini devre dışı bırakıyor durumlarını değiştirmek yerine gruplandırın (tercih ettiğim şey değil).

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

En iyi cevabı

1

Sinyal toggled radyo düğmelerinizin durumunu her değiştirdiğinizde tetiklenir. Yani, aradığınızda tetiklenecektir setChecked (geçiş yaptığınız radyo düğmesi için bir kez, diğeri için bir kez açarsınız) ve update_image yanlış dava denir.

Radyo düğmesinin durumunu kontrol etmeli ve aramalısınız update_image yalnızca radyo düğmesi değiştirilmişse:

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

İşe yaradı! teşekkürler!
Agustin Barrachina

Diğer dillerde

Bu sayfa diğer dillerde

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