添加和删除 QTreeWidget 项目的复选框
Add and remove checkboxes for QTreeWidgetItems
我的应用程序是用 PyQt5 编写的。
我有一个带有一些元素的 QTreeWidget:
Parent
--Child 1
--Child 2
我想动态地添加和删除子元素的复选框。我设法用
添加了复选框
item.setFlags(item.flags() | 16)
和
item.setCheckState(0, QtCore.Qt.Checked)
但是我有两个问题:
我无法删除那些复选框。我尝试重置标志,但复选框仍然存在,只是被禁用。我也不能使用样式表,因为我不能为单个 treeWidgetItem 使用 .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 标志不会删除复选框。
不要放置
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.[=14 来清除状态=]
我的应用程序是用 PyQt5 编写的。 我有一个带有一些元素的 QTreeWidget:
Parent
--Child 1
--Child 2
我想动态地添加和删除子元素的复选框。我设法用
添加了复选框item.setFlags(item.flags() | 16)
和
item.setCheckState(0, QtCore.Qt.Checked)
但是我有两个问题:
我无法删除那些复选框。我尝试重置标志,但复选框仍然存在,只是被禁用。我也不能使用样式表,因为我不能为单个 treeWidgetItem 使用 .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 标志不会删除复选框。
不要放置
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.[=14 来清除状态=]