如果复选框是随机的(5-10),我想限制用户选择任意两个复选框。self.check_boxes = [QtWidgets.QCheckBox(self.dockWidgetContents_2) for i in col_names],这是我正在生成的复选框列表。请帮我做我想要的复选框。这是我的密码:
def uncheck(self, state):
`if state == Qt.CheckState.Checked:
global checkedItems
try:
senderCheckBox = [i for i in self.check_boxes if i.isChecked() and not i in checkedItems][0]
checkedItems[0] = checkedItems[1]
checkedItems[1] = senderCheckBox
itemsToUncheck = [i for i in self.check_boxes if not i in checkedItems]
for checkBox in itemsToUncheck:
checkBox.setChecked(False)`发布于 2022-01-16 18:47:25
为了保留选中的号码,必须跟踪复选框切换的顺序。
要获得对切换复选框的引用,可以使用QButtonGroup,它具有一个buttonToggled信号,它同时发出复选框和新状态。
在连接到该信号的函数中,将复选框附加到持久列表(不要使用globals!)如果状态被选中并取消选中,则保持取消检查第一项,直到遵守数字;在相同的函数中,如果状态未选中,则从该列表中删除复选框。这样,由于信号在同一个线程中是同步的,所以您可以使用一个简单的while循环,并且可以确定顺序将始终得到遵守。
class Test(QtWidgets.QWidget):
def __init__(self):
super().__init__()
layout = QtWidgets.QVBoxLayout(self)
self.checked = []
self.buttonGroup = QtWidgets.QButtonGroup(exclusive=False)
for i in range(5):
checkBox = QtWidgets.QCheckBox('Check {}'.format(i + 1))
layout.addWidget(checkBox)
self.buttonGroup.addButton(checkBox)
self.buttonGroup.buttonToggled.connect(self.limitChecked)
def limitChecked(self, checkBox, state):
if state:
self.checked.append(checkBox)
# do *NOT* use a "for", as the list might change in the meantime
while len(self.checked) > 2:
self.checked[0].setChecked(False)
else:
if checkBox in self.checked:
self.checked.remove(checkBox)https://stackoverflow.com/questions/69880484
复制相似问题