面对如此有趣的局面。我有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)
答案 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_())