2011-12-31 14 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のチェックを外すことができます。しかし、別の問題が発生します。グループは排他的ではないので、私は両方のradioButtonsが何も起こってはならないものをチェックするように設定できます。

一度に1つのボタンだけを選択できるようにするには、どうすればよいですか?

答えて

5

これは、不正行為のように感じているが、それは動作します:

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_() 

あなたはself.group.setExclusive(False)が設定されている場合、あなたは両方のラジオボタンをuntoggleすることができ、指摘してきたように。

self.group.setExclusive(True)の場合、ラジオボタンは1つだけ設定できます。

したがってmy_methodは、単にself.group.setExclusive(False)を呼び出し、両方のラジオボタンを設定解除できるようにしてから、self.group.setExclusive(True)をリセットします。


PS。私はparentは、このライン上Noneに設定すべきではないと思う:

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

非自明なparentFormに送信された場合、あなたはおそらくQDialog.__init__ににそのparentを渡したいからです。

関連する問題