取消选中qbuttongroip

时间:2017-06-15 04:57:50

标签: python qt pyqt pyqt4

面对如此有趣的局面。我有QButtonGroup,其中有一些QCheckBox。所有QCheckBox都是我想要的互斥,但有一个令人不快的事实。当我想取消选中所选的QCheckBox时,我无法做到。如何解决这个问题,有人会遇到类似的问题吗?

这是我的QButtonGroup:

self.group = QtGui.QButtonGroup()
self.group.addButton(self.chk_box_1, 1)
self.group.addButton(self.chk_box_2, 2)

1 个答案:

答案 0 :(得分:0)

如果您暂时停用独占属性,则可以完成任务,因为您的情况是创建一个保存按下最后一个按钮的变量并检查是否再次按下该按钮,如果发生这种情况,我们通过取消选中该按钮来停用该属性并再次激活排他性财产。

    [...]
    self.group.setExclusive(True)
    self.btnLastChecked = None
    group.buttonClicked.connect(self.onButtonClicked)

def onButtonClicked(self, btn):
    if not self.btnLastChecked:
        self.btnLastChecked = btn
    else:
        if self.btnLastChecked == btn:
            self.sender().setExclusive(False)
            btn.setCheckState(QtCore.Qt.Unchecked)
            self.sender().setExclusive(True)
            self.btnLastChecked = None
        else:
            self.btnLastChecked = btn

示例:

import sys
from PyQt4 import QtCore, QtGui

class Widget(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        layout=QtGui.QHBoxLayout(self)

        self.group=QtGui.QButtonGroup(self)
        for i in range(10):
            btn = QtGui.QCheckBox(str(i))
            self.group.addButton(btn, i)
            layout.addWidget(btn)

        self.group.setExclusive(True)
        self.btnLastChecked = None
        self.group.buttonClicked.connect(self.onButtonClicked)

    def onButtonClicked(self, btn):
        if not self.btnLastChecked:
            self.btnLastChecked = btn
        else:
            if self.btnLastChecked == btn:
                self.sender().setExclusive(False)
                btn.setCheckState(QtCore.Qt.Unchecked)
                self.sender().setExclusive(True)
                self.btnLastChecked = None
            else:
                self.btnLastChecked = btn


if __name__=='__main__':
    app = QtGui.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())