gpt4 book ai didi

python - 复选框以取消选中所有其他复选框

转载 作者:太空宇宙 更新时间:2023-11-03 14:01:58 24 4
gpt4 key购买 nike

我正在尝试进行一些验证:

  • 选中“选择 A”“选择 B” 时,“未选择” 会自动取消选中
  • 选中“未选择”时,“选择 A”“选择 B” 都会自动取消选中

但是当我运行此代码时,单击任何复选框将取消选中 所有 3 个复选框。

即窗口初始化时选中“未选择”。但是当我点击“选择 A” 时,它会取消选中 “未选择”,这是有意的,但是 “选择 A” 没有得到检查。

我做错了什么?


import sys
import PyQt5

class Test(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
checkBoxNone = QCheckBox("None Selected")
checkBoxA = QCheckBox("Select A")
checkBoxB = QCheckBox("Select B")

checkBoxNone.setChecked(True)
checkBoxNone.stateChanged.connect(lambda checked: (checkBoxA.setChecked(False), checkBoxB.setChecked(False)))
checkBoxA.stateChanged.connect(lambda checked: checkBoxNone.setChecked(False))
checkBoxB.stateChanged.connect(lambda checked: checkBoxNone.setChecked(False))

grid = QGridLayout()

grid.addWidget(checkBoxNone, 1, 0)
grid.addWidget(checkBoxA, 2, 0)
grid.addWidget(checkBoxB, 3, 0)

self.setLayout(grid)
self.setWindowTitle('Test')
self.show()

if __name__ == '__main__':
if not QApplication.instance():
app = QApplication(sys.argv)
else:
app = QApplication.instance()
ex = Test()
sys.exit(app.exec_())

最佳答案

问题是因为根据您的要求,如果某些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)

关于python - 复选框以取消选中所有其他复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com