2012-06-03 4 views
0

QButtonGroup 컨테이너 내부에 두 개의 라디오 버튼이있는 GUI가 있습니다.이 버튼은 마우스 오른쪽 버튼 클릭 컨텍스트 메뉴가 필요하며 QButtonGroup은 시각적 표현이이 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

빠른 수정, 만델로 헤드 업 덕분에 상황이 방법 I "예상"그들에게로 행동 갈 수 :

다음 당신이 무엇을보고의 작은 예입니다 두 버튼 독점 그룹은 다음과 같이 코드를 변경하는 것입니다.

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