【发布时间】:2019-11-22 15:27:48
【问题描述】:
我试图通过QCheckBox clicked 信号传递两个单独的变量:它的按下后状态,以及它在列表中的索引。
例如,这是我的代码:
# 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,而我没有。
【问题讨论】:
标签: python pyqt5 signals-slots qcheckbox