添加和删除QTreeWidgetItems的复选框

2024-10-01 17:41:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我的应用程序是用PyQt5编写的。 我有一个带有一些元素的QTreeWidget:

Parent
--Child 1
--Child 2

我想动态地向子元素添加和删除复选框。我设法将复选框添加为

item.setFlags(item.flags() | 16)

item.setCheckState(0, QtCore.Qt.Checked)

但我有两个问题:

我无法删除这些复选框。我尝试重置标志,但复选框仍然存在,只是被禁用。我也不能使用样式表,因为我不能将.setStyleSheet用于一个树边距。我怎样才能删除它

我不想那样

最简单的例子:

from PyQt5.QtWidgets import *

from PyQt5 import QtCore
app = QApplication([])
label = QTreeWidget()
label.show()
parent = QTreeWidgetItem(label)
parent.setText(0, "Parent")

child1 = QTreeWidgetItem(parent)
child1.setText(0, "child1")

child2 = QTreeWidgetItem(parent)
child2.setText(0, "child2")

child1.setFlags(child1.flags() | QtCore.Qt.ItemIsUserCheckable)
child1.setCheckState(0, QtCore.Qt.Checked)

child1.setFlags(child1.flags() & ~QtCore.Qt.ItemIsUserCheckable)


app.exec_()

将ItemIsUserCheckable标志更改回不会删除该复选框


Tags: 元素itemqtlabelpyqt5复选框parentflags
1条回答
网友
1楼 · 发布于 2024-10-01 17:41:37

请勿放置

item.setFlags(item.flags() | 16)

因为它不可读,所以最好使用

item.setFlags(item.flags() | Qt.ItemIsUserCheckable)

转到问题所在,如果要删除复选框,则必须删除该标志:

item.setFlags(item.flags() & ~Qt.ItemIsUserCheckable)
item.setData(0, QtCore.Qt.CheckStateRole, None)

进行绘制的委托不考虑与QModelIndex关联的标志,因此@musicamante指出,还必须通过设置None来清除状态

相关问题 更多 >

    热门问题