我试图通过一个QCheckBox
点击的信号传递两个独立的变量:它的post pressed状态和它在列表中的索引
例如,这是我的代码:
# pip install pyqt5
from PyQt5.QtMultimediaWidgets import *
from PyQt5.QtMultimedia import *
from functools import partial
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import *
import sys
batch_name = ['Test1', 'test2', 'test']
total_batches = 0
unfinished_batches = 0
class MainMenu(QWidget):
def __init__(self, parent = None):
global total_batches, unfinished_batches, batch_name
super(MainMenu, self).__init__(parent)
self.scroll = QScrollArea(self)
self.scroll.setWidgetResizable(True)
self.content = QWidget()
self.scroll.setWidget(self.content)
self.lay = QGridLayout(self.content)
for i, j in enumerate(batch_name):
self.btnName = QPushButton(j, self)
self.btnName.setFlat(True)
self.lay.addWidget(self.btnName, i, 1)
self.check_box = QCheckBox(self)
checkbox_index = partial(self.clickBox, i, i)
self.check_box.stateChanged.connect(checkbox_index)
self.lay.addWidget(self.check_box, i, 0)
total_batches += 1
def clickBox(self, state, index):
print(index)
print(state)
global unfinished_batches, total_batches
if state == Qt.Checked:
unfinished_batches += 1
else:
unfinished_batches -= 1
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainMenu()
main.show()
sys.exit(app.exec_())
(是的,我知道我两次通过了索引。)
比如说,我按下第一个QCheckBox
(Test1
):我应该得到True
作为状态,0
作为索引。如果我再次按Test1
,我希望得到状态的False
,以及索引的0
。再举一个例子,如果我按test
(最后一个QCheckBox
),我应该得到状态的True
,索引的2
,再按一次,状态的False
,索引的2
上面的代码给了我索引,但它没有给我它的状态-这就是我一直坚持的。如果QCheckBox
被按下,我期望发生什么,那么我应该得到True
我没有得到的地方
你没有正确使用
partial
。如果这两个参数都在partial
中指定,那么clickBox
的两个参数都将被i
的值覆盖。只需指定index
参数的值,并允许信号提供state
参数的值。这可以使用关键字参数完成,如下所示:但是请注意,
state
将是来自CheckState enum的值,因此,如果您特别想获得True/False
,可以使用lambda
:而
clickState
需要这样:试试看:
相关问题 更多 >
编程相关推荐