我創建了 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。保留 4 種可能組合中的 3 種。因此,如果我選擇complex并且 library was 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)make 取消對我單擊的單選按鈕的選擇一樣。(如果你問我很奇怪)。
使用
hasattr是因為根據我呼叫函式的順序,有一些單選按鈕將在另一個之前創建,因此它可能不存在。這 是我正在考慮的一個選項,但它禁用了單選按鈕組而不是更改它們的狀態(不是我喜歡的)。
uj5u.com熱心網友回復:
toggled每當您更改單選按鈕的狀態時都會觸發該信號。因此,它會在您呼叫時觸發setChecked(一次用于您切換的單選按鈕,一次用于您取消切換的另一個)并且update_image被呼叫是錯誤的情況。
您必須檢查單選按鈕的狀態并update_image僅在單選按鈕被切換時呼叫:
rb2.toggled.connect(lambda state: state and self.update_image("library", rb2.text(), state))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368576.html
