Python 复选框取消选中所有其他复选框
我试图进行一些验证,以便:Python 复选框取消选中所有其他复选框,python,lambda,pyqt,pyqt5,qcheckbox,Python,Lambda,Pyqt,Pyqt5,Qcheckbox,我试图进行一些验证,以便: 选中“选择A”或“选择B”时,“未选择”将自动取消选中 选中“未选择”时,“选择A”和“选择B”都将自动取消选中 但是,当我运行此代码时,单击任何复选框都将取消选中这3个复选框 i、 e.窗口初始化时勾选了“未选择”。但当我单击“选择一个”时,它会取消选中“未选择”,这是预期的,但“选择一个”不会被选中 我做错了什么 造成此问题的原因是,根据您的要求,只有在选中了某些QCheckBox但未进行验证时,您才应选择这些选项,以便能够正确处理它,创建插槽,并了解发出信
- 选中“选择A”或“选择B”时,“未选择”将自动取消选中
- 选中“未选择”时,“选择A”和“选择B”都将自动取消选中
造成此问题的原因是,根据您的要求,只有在选中了某些
QCheckBox
但未进行验证时,您才应选择这些选项,以便能够正确处理它,创建插槽,并了解发出信号的对象,sender()
方法:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Test(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.checkBoxNone = QCheckBox("None Selected")
self.checkBoxA = QCheckBox("Select A")
self.checkBoxB = QCheckBox("Select B")
self.checkBoxNone.setChecked(True)
self.checkBoxNone.stateChanged.connect(self.onStateChange)
self.checkBoxA.stateChanged.connect(self.onStateChange)
self.checkBoxB.stateChanged.connect(self.onStateChange)
grid = QGridLayout(self)
grid.addWidget(self.checkBoxNone, 1, 0)
grid.addWidget(self.checkBoxA, 2, 0)
grid.addWidget(self.checkBoxB, 3, 0)
self.setWindowTitle('Test')
self.show()
@pyqtSlot(int)
def onStateChange(self, state):
if state == Qt.Checked:
if self.sender() == self.checkBoxNone:
self.checkBoxA.setChecked(False)
self.checkBoxB.setChecked(False)
elif self.sender() in (self.checkBoxA, self.checkBoxB):
self.checkBoxNone.setChecked(False)
这个很好用!非常感谢你。实际上,我花了几个小时在谷歌上搜索解决方案,但我访问过的几十个页面(其中许多页面都是StackOverflow)都没有解决这个问题。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Test(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.checkBoxNone = QCheckBox("None Selected")
self.checkBoxA = QCheckBox("Select A")
self.checkBoxB = QCheckBox("Select B")
self.checkBoxNone.setChecked(True)
self.checkBoxNone.stateChanged.connect(self.onStateChange)
self.checkBoxA.stateChanged.connect(self.onStateChange)
self.checkBoxB.stateChanged.connect(self.onStateChange)
grid = QGridLayout(self)
grid.addWidget(self.checkBoxNone, 1, 0)
grid.addWidget(self.checkBoxA, 2, 0)
grid.addWidget(self.checkBoxB, 3, 0)
self.setWindowTitle('Test')
self.show()
@pyqtSlot(int)
def onStateChange(self, state):
if state == Qt.Checked:
if self.sender() == self.checkBoxNone:
self.checkBoxA.setChecked(False)
self.checkBoxB.setChecked(False)
elif self.sender() in (self.checkBoxA, self.checkBoxB):
self.checkBoxNone.setChecked(False)