2011-12-31 4 views
2

이 코드 샘플 : 버튼 내가 선택한 라디오 버튼이 체크 될 것으로 기대하지만, 그런 일이 결코 클릭의 선택을 취소 라디오 버튼 - PyQt4

from PyQt4.QtGui import QDialog, QPushButton, QRadioButton, QHBoxLayout, QApplication, QButtonGroup 
import sys 

class Form(QDialog): 
    def __init__(self, parent=None): 
     super(Form, self).__init__(parent=None) 

     button = QPushButton('Button') 
     self.radiobutton1 = QRadioButton('1') 
     self.radiobutton2 = QRadioButton('2') 
     #self.group = QButtonGroup() 
     #self.group.addButton(self.radiobutton1) 
     #self.group.addButton(self.radiobutton2)  
     #self.group.setExclusive(False) 

     layout = QHBoxLayout() 
     layout.addWidget(button) 
     layout.addWidget(self.radiobutton1) 
     layout.addWidget(self.radiobutton2) 
     self.setLayout(layout) 

     button.clicked.connect(self.my_method) 

    def my_method(self): 
     self.radiobutton1.setChecked(False) 
     self.radiobutton2.setChecked(False) 

app = QApplication(sys.argv) 
form = Form() 
form.show() 
app.exec_() 

. 주석 줄의 주석을 제거하고 코드를 실행하면 radioButtons의 선택을 취소 할 수 있습니다. 그러나 또 다른 문제가 발생합니다. 그룹이 배타적이지 않기 때문에 두 가지 radioButton을 모두 설정하면 안됩니다.

한 번에 하나의 버튼 만 선택할 수있는 반면 버튼을 딸깍 소리가 나도록하려면 어떻게해야합니까?

답변

5

이 부정 행위 같은 느낌,하지만 작동 : self.group.setExclusive(False)이 설정되어있는 경우

당신이 지적했듯이
import sys 
import PyQt4.QtGui as QtGui 

class Form(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(Form, self).__init__(parent) 

     button = QtGui.QPushButton('Button') 
     button.clicked.connect(self.my_method) 

     self.radiobutton1 = QtGui.QRadioButton('1') 
     self.radiobutton2 = QtGui.QRadioButton('2') 

     layout = QtGui.QHBoxLayout() 
     layout.addWidget(button) 
     layout.addWidget(self.radiobutton1) 
     layout.addWidget(self.radiobutton2) 
     self.setLayout(layout) 

     self.group = QtGui.QButtonGroup() 
     self.group.addButton(self.radiobutton1) 
     self.group.addButton(self.radiobutton2)  

    def my_method(self): 
     self.group.setExclusive(False)   
     self.radiobutton1.setChecked(False) 
     self.radiobutton2.setChecked(False) 
     self.group.setExclusive(True) 

app = QtGui.QApplication(sys.argv) 
form = Form() 
form.show() 
app.exec_() 

, 둘 다 라디오 버튼을 untoggle 수 있습니다.

self.group.setExclusive(True)의 경우 라디오 버튼을 하나만 설정할 수 있습니다.

그래서 my_method은 두 개의 라디오 버튼을 해제 할 수 있도록 self.group.setExclusive(False)을 호출하기 만하면 self.group.setExclusive(True)을 재설정합니다.


추신. 나는 parent이 줄에 None로 설정할 수 없습니다한다고 생각합니다 :

super(Form, self).__init__(parent = None) 

아닌 사소한 parentForm로 전송되는 경우 때문에, 당신은 아마 통과 할 것이라고 parentQDialog.__init__로합니다.

관련 문제