gpt4 book ai didi

python - 单击时发送 QCheckBox 的状态和数字

转载 作者:行者123 更新时间:2023-12-01 00:20:32 25 4
gpt4 key购买 nike

我试图通过 QCheckBox 单击信号传递两个单独的变量:其按下后的状态及其在列表中的索引。

例如,这是我的代码:

# 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,而我没有得到。

最佳答案

尝试一下:

import sys
from functools import partial
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class MainMenu(QWidget):
def __init__(self, parent = None):
super(MainMenu, self).__init__(parent)

batch_name = ['Test1', 'test2', 'test']
lay = QGridLayout(self)

for i, j in enumerate(batch_name):
check_box = QCheckBox()
lay.addWidget(check_box, i, 0)

btnName = QPushButton(j)
btnName.setFlat(True)
btnName.setCheckable(True)
btnName.clicked.connect(partial(self.btnCliced, i, j, check_box))
lay.addWidget(btnName, i, 1)

check_box.stateChanged.connect(partial(self.clickBox, i, j, btnName))

def clickBox(self, i, j, btnName, state):
print(f'clickBox: i={i}, j={j}, state={state} : {bool(state)};')
if state: btnName.setChecked(True)
else: btnName.setChecked(False)

def btnCliced(self, i, j, check_box, state):
print(f'btnCliced: i={i}, j={j}, state={state};')
if state: check_box.setChecked(True)
else: check_box.setChecked(False)


if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainMenu()
main.show()
sys.exit(app.exec_())

enter image description here

关于python - 单击时发送 QCheckBox 的状态和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58997277/

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