什么时候?
checkOne
选中并单击
checkTwo
,输入
selectBooks
.
在该函数中,输入
if-else
-第一个条件是
self.checkOne.isChecked()
,仍然是
True
,所以你
print(self.checkOne.text(), "1")
,尽管您刚刚单击
支票二
.
你可以给每个人都打个槽
QCheckBox
(选项1),否则您需要不知何故地告诉插槽
QCheckbox
刚刚被点击(见选项2)。
你还必须使用
stateChanged
信号。
方案1
from PyQt5 import QtWidgets, QtCore, QtGui
import sys
class window_gui(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.checkOne = QtWidgets.QCheckBox('one')
self.checkTwo = QtWidgets.QCheckBox('two')
self.vlayout = QtWidgets.QVBoxLayout()
self.vlayout.addWidget(self.checkOne)
self.vlayout.addWidget(self.checkTwo)
self.setLayout(self.vlayout)
self.checkOne.stateChanged.connect(self.selectBooks1)
self.checkTwo.stateChanged.connect(self.selectBooks2)
def selectBooks1(self, toggle):
if toggle == QtCore.Qt.Checked:
print('checked 1')
else:
print('unchecked 1')
def selectBooks2(self, toggle):
if toggle == QtCore.Qt.Checked:
print('checked 2')
else:
print('unchecked 2')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = window_gui()
w.show()
app.exec()
选项2(
check out 'lambda' expressions
):
from PyQt5 import QtWidgets, QtCore, QtGui
import sys
class window_gui(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.checkOne = QtWidgets.QCheckBox('one')
self.checkTwo = QtWidgets.QCheckBox('two')
self.vlayout = QtWidgets.QVBoxLayout()
self.vlayout.addWidget(self.checkOne)
self.vlayout.addWidget(self.checkTwo)
self.setLayout(self.vlayout)
self.checkOne.stateChanged.connect(lambda state=self.checkOne.isChecked(), no=1: self.selectBooks(state, no))
self.checkTwo.stateChanged.connect(lambda state=self.checkTwo.isChecked(), no=2: self.selectBooks(state, no))
def selectBooks(self, toggle, no):
if toggle == QtCore.Qt.Checked:
print('checked '+str(no))
else:
print('unchecked '+str(no))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = window_gui()
w.show()
app.exec()