У меня есть 2 радиокнопки, созданные (внутри класса QMainWindow), такие как:
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
Я хочу сделать невозможным выбор complex
опция группы радиокнопок dtype и tensorflow
радиобуттон библиотечных радиобуттонов. Оставляя 3 из 4 возможных комбинаций. Поэтому, если я выберу complex
и библиотека была tensorflow
, Я хочу автоматически изменить библиотеку на cvnn
. Я попытался реализовать это так:
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.
Странно то, что это на самом деле работает в том смысле, что, например, если я нахожусь на complex
активирован и выберите tensorflow
, радиобуттон меняется на real
(чего я хочу!) но tensorflow
не выбирается! Мне нужно выбрать его снова, как будто делая self.real_dtype_rb.setChecked(True)
отменяет выбор радиоприемника, на который я нажал. (Очень странно, если вы спросите меня).
То
hasattr
используется потому, что в зависимости от порядка, в котором я вызываю функции, некоторые радиокнопки будут созданы раньше других, поэтому их может не существовать.Этот это вариант, который я рассматриваю, но он отключает группу radiobutton вместо изменения их состояния (не то, что я предпочитаю).