2012-06-03 43 views
0

我有一個QButtonGroup容器,這本身就是一個QGroupBox內(該按鈕組需要右鍵上下文菜單中,並且由於QButtonGroup不裏面兩個單選按鈕的GUI具有視覺表示似乎它不具有setContextMenuPolicy方法)下面的代碼段被認爲響應於輸入數據從串行鏈路來更新互斥按鈕的狀態:PyQt的 - button.toggle()方法不工作

elif widgetName in self.buttonBoxDict: 
      buttonGroup = getattr(self.ui, self.buttonBoxDict[widgetName]) 
      checkedButton = buttonGroup.checkedButton() 
      checkedButtonName = str(checkedButton.objectName()) 
      if value >= self.onValue and self.buttonDict[checkedButtonName][1] == self.offValue: 
       checkedButton.toggle() 
       assert(not checkedButton.isChecked()) 
       self.windowHandler.buttonChanged(self, self.onValue, cc) 
      elif value < self.onValue and self.buttonDict[checkedButtonName][1] == self.onValue: 
       checkedButton.toggle() 
       self.windowHandler.buttonChanged(self, self.offValue, cc) 

不幸的是這是行不通的,我最初知道此處選擇的按鈕被選中,但在GUI中的按鈕的狀態不會改變,即使代碼似乎被正確執行斷言總是失敗。任何想法爲什麼這可能會出錯?

+0

這是很難沒有上下文理解。你能提供一個可運行的例子嗎? – Avaris

+0

@Avaris感謝您的答覆 - 我去看看,我可以把更多的東西直白在一起說明了這個問題。 – Bitrex

回答

1

你的問題是基於這樣的事實,你使用的是設置爲獨佔一個QButtonGroup。如果你看看在documentation,你會看到,它規定如下:

用戶無法通過點擊它取消當前選中按鈕;相反,組中的其他按鈕必須被點擊

我不知道你的應用程序的邏輯,但如果你使用的是獨特的按鍵組,您將需要設置一個diff按鈕進行檢查或做不要使用專屬組並自行執行檢查。

以下是你所看到的一個小例子:

import sys 
from PyQt4 import QtGui 

app = QtGui.QApplication(sys.argv) 
button1 = QtGui.QCheckBox('test 1') 
group = QtGui.QButtonGroup() 
group.setExclusive(True) 
group.addButton(button1) 
print button1.isChecked() 
button1.toggle() 
print button1.isChecked() 
button1.toggle() 
print button1.isChecked() 
# toggle seems not to work, add a second button 
button2 = QtGui.QCheckBox('test 2') 
group.addButton(button2) 
print button2.isChecked() 
button2.toggle() 
print button1.isChecked() 
print button2.isChecked() 
+0

大 - 謝謝你抓住的是我! – Bitrex

0

速戰速決,這要歸功於曼德爾擡頭,把事情的行爲方式我「預期」他們爲兩個按鈕的獨家組的代碼更改爲類似這樣:

if value >= self.onValue and self.buttonDict[checkedButtonName][1] == self.offValue: 
    for button in buttonGroup.buttons(): 
      if button != checkedButton: 
       button.toggle()