python - 取消选中单选按钮 - PyQt4

标签 python radio-button 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。但是另一个问题出现了。因为该组不是排他性的,所以我可以将两个单选按钮都设置为选中某些不能发生的事情。

当一次只能选择一个按钮时,我应该怎么做才能取消选中按钮?

最佳答案

这感觉像是作弊,但确实有效:

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) 后,您可以取消切换两个单选按钮。

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

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


附言。我认为 parent 不应在此行上设置为 None:

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

因为如果一个非平凡的 parent 被发送到 Form,您可能希望将那个 parent 传递给 QDialog .__init__

关于python - 取消选中单选按钮 - PyQt4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689909/

相关文章:

python - wx.SplashScreen 顶部的动态文本

python - 如何通过行索引和列索引将元素插入到 Numpy 矩阵中

android - 如何取消选中android中的单选按钮

python - 将绘图嵌入 GUI 中

python - pyqt - 将 qt 设计器中的子小部件放置在父级附近

python - 如何将此 for 循环生成的列表列表写入文件(Python)?

python - 在 Python3 中绘制具有节点和边的网络

android - 从 ListView 中只选择一个单选按钮

android - 如何在 Android 中验证单选按钮组?

python - 如何在 MacOS 上使用 QGLFormat 更改 OpenGL 版本?