Tengo 2 botones de radio creado (en el interior de un QMainWindow clase) 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
Quiero hacer que sea imposible para seleccionar el complex
la opción de la dtype grupo de botones de radio y tensorflow
radiobutton de la biblioteca de botones de radio. Dejando de 3 de las 4 combinaciones posibles. Así que si yo seleccione complex
y la biblioteca fue tensorflow
Quiero cambiar automáticamente a la biblioteca cvnn
. Traté de implementar algo como esto:
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.
Lo extraño es que realmente funciona en el sentido de que, por ejemplo, si estoy en complex
activado y seleccione tensorflow
el radiobutton cambios real
(lo que yo quiero!) pero tensorflow
no es seleccionado! Tengo que seleccionar de nuevo como si la realización de self.real_dtype_rb.setChecked(True)
cancela la selección de la opción que se hace clic en. (Muy raro si me preguntan a mí).
El
hasattr
se utiliza debido a que dependiendo del orden en el que yo llamo el funciones, hay algunos botones de radio que va a ser creado antes el otro, así que es posible que no exista.Este es una opción que estoy considerando, pero es deshabilitar el botón de radio grupo en lugar de cambiar su estado (no lo que yo prefiero).