【发布时间】:2022-01-01 18:22:16
【问题描述】:
我创建了 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
我想让它不可能选择 dtype 单选按钮组的 complex 选项和库单选按钮的 tensorflow 单选按钮。在 4 种可能的组合中留下 3 种。所以如果我选择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是因为根据我调用的顺序 函数,之前会创建一些单选按钮 另一个,所以它可能不存在。 -
This 是我正在考虑的一个选项,但它正在禁用单选按钮 组而不是改变他们的状态(不是我喜欢的)。
【问题讨论】:
-
你可以在开始时使用
self.cvnn_library_rb = None,然后你不需要hasattr(self, 'cvnn_library_rb')而是if self.cvnn_library_rb: