取消选中radiobutton - PyQt4

ils*_*tam 2 python pyqt4 radio-button

在这个代码示例中:

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_()
Run Code Online (Sandbox Code Playgroud)

单击按钮时,我希望取消选中所选的radioButton,但这种情况从未发生过.如果我取消注释注释行并运行代码,那么我可以取消选中radioButtons.但另一个问题出现了.因为该组不是独占的,所以我可以设置两个不能发生的radioButtons.

如果一次只能选择一个按钮,我该怎么办才能解开按钮?

unu*_*tbu 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_()
Run Code Online (Sandbox Code Playgroud)

正如您所指出的,当self.group.setExclusive(False)设置时,您可以解开两个单选按钮.

而且self.group.setExclusive(True),只能设置一个单选按钮.

所以my_method简单地调用self.group.setExclusive(False)它可以取消设置两个单选按钮,然后重置self.group.setExclusive(True).


PS.我认为parent不应该None在这一行上设置:

super(Form, self).__init__(parent = None)
Run Code Online (Sandbox Code Playgroud)

因为如果parent发送一个非平凡的Form,你可能想要传递parent给它QDialog.__init__.

  • QButtonGroup 在 PyQt5 中的 QtWidgets(不是 QtGui)中 (3认同)