gpt4 book ai didi

python - 我创建了一个带有复选框的组合框,但是当选中复选框时我无法捕获该事件

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

生成可勾选组合框的代码如下:

def check_able_combox(combo, options, length):

model = QStandardItemModel(length, 1) # 4 rows, 1 col
for i,area in enumerate(options):
item = QStandardItem(area)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setData(Qt.Unchecked, Qt.CheckStateRole)
model.setItem(i, 0, item)
combo.setModel(model)
return combo

我以这种方式使用上述函数:

self.checkable_combobox_usecases =check_able_combox(self.usecaseTypeCombobox, usecase_type, len(usecase_type))

其中,self.usecaseTypeCombobox是我创建的常规组合框, usecase_type是一个列表 ["Test1", "Test2", "Test3"]

所以,我确实得到了一个带有带有此代码的复选框的组合框。但我也想捕获我正在检查的复选框的文本。有人可以指导我如何捕获此事件吗?

我尝试过self.checkable_combobox_usecases.currentIndexChanged.connect(self.get_UsecaseType)--> 但没有成功

最佳答案

currentIndexChanged 信号仅在选择项目时发出,而不是在检查项目时发出,因此该信号不起作用。

考虑到上述情况是使用模型的 itemChanged 信号,该信号在某些信息更改时发出,在这种情况下,当复选框状态更改时以及与角色关联的任何其他信息更改时,都会发出该信号,以便为了区分,我们必须记住之前的状态并检查它是否发生了变化。

from PyQt5.QtCore import pyqtSlot, Qt
from PyQt5.QtGui import QStandardItem, QStandardItemModel
from PyQt5.QtWidgets import QApplication, QComboBox, QMainWindow

LastStateRole = Qt.UserRole + 1000


def check_able_combox(combo, options):
model = QStandardItemModel(len(options), 1)
for i, area in enumerate(options):
item = QStandardItem(area)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setData(Qt.Unchecked, Qt.CheckStateRole)
model.setItem(i, 0, item)
combo.setModel(model)


class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.usecaseTypeCombobox = QComboBox()

usecase_type = ["Test1", "Test2", "Test3"]
check_able_combox(self.usecaseTypeCombobox, usecase_type)

self.setCentralWidget(self.usecaseTypeCombobox)

self.usecaseTypeCombobox.model().itemChanged.connect(self.on_itemChanged)

@pyqtSlot("QStandardItem*")
def on_itemChanged(self, item):
last_state = item.data(LastStateRole)
current_state = item.data(Qt.CheckStateRole)
# verify that the modified data is related to the Qt::CheckStateRole role
if last_state != current_state:
# save last state
item.model().blockSignals(True)
item.setData(current_state, LastStateRole)
item.model().blockSignals(False)

print(current_state, item.text())


if __name__ == "__main__":
import sys

app = QApplication(sys.argv)

w = MainWindow()
w.show()
sys.exit(app.exec_())

关于python - 我创建了一个带有复选框的组合框,但是当选中复选框时我无法捕获该事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57932490/

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