QTreeWidgetItem 隐藏子复选框但不隐藏父复选框
QTreeWidgetItem hide child checkboxes but not parent checkboxes
我有一个有两个级别的 QTreeWidget。父级别在第一,子级别在下面。我希望父级包含复选框,但我希望子级没有复选框。在下面的示例中,每个 QTreeWidgetItem 都显示一个复选框。如果我删除 "child.setCheckState(0, Qt.Unchecked)" 那么所有复选框都会消失,而不仅仅是子复选框。
如何隐藏子复选框而不隐藏父复选框?
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
def main():
app = QApplication (sys.argv)
tree = QTreeWidget ()
headerItem = QTreeWidgetItem()
item = QTreeWidgetItem()
for i in xrange(2):
parent = QTreeWidgetItem(tree)
parent.setText(0, "Parent {}".format(i))
parent.setFlags(parent.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
parent.setExpanded(True)
parent.setCheckState(0, Qt.Unchecked)
for x in xrange(3):
child = QTreeWidgetItem(parent)
child.setFlags(child.flags() & ~(Qt.ItemIsSelectable | Qt.ItemIsUserCheckable))
child.setText(0, "Child {}".format(x))
#child.setCheckState(0, Qt.Unchecked)
tree.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
您应该从 child flags 中删除标志 ItemIsUserChechable
和 ItemIsSelectable
而不是添加它们:
child.setFlags(child.flags() & ~(Qt.ItemIsSelectable | Qt.ItemIsUserCheckable))
我还希望您不应该设置 child 的 checkState,而应设置 parent 的 checkState。
有关二元运算的更多信息,请参阅 python documentation。
此处 "child.setCheckState(0, Qt.Unchecked)" -- 确实意味着“您正在将复选框设置为未选中状态的“0”列”。
现在重新访问您的代码:
您没有将其设置为您想要的 parent,因此请执行以下操作:
为 parent 项设置复选框:
parent.setCheckState(0, Qt.Unchecked)
完全删除下面的代码,因为它为 child 设置了您不需要的复选框
child.setCheckState(0, Qt.Unchecked)
同时删除标志设置,因为我们注意到将标志设置为 parent,并被传送到 child 项。
代码在第一个 for 循环中大致看起来像这样:
parent = QTreeWidgetItem(tree)
parent.setText(0, "Parent {}".format(i))
parent.setExpanded(True)
parent.setCheckState(0, Qt.Unchecked)
for x in xrange(3):
child = QTreeWidgetItem(parent)
child.setText(0, "Child {}".format(x))
我有一个有两个级别的 QTreeWidget。父级别在第一,子级别在下面。我希望父级包含复选框,但我希望子级没有复选框。在下面的示例中,每个 QTreeWidgetItem 都显示一个复选框。如果我删除 "child.setCheckState(0, Qt.Unchecked)" 那么所有复选框都会消失,而不仅仅是子复选框。
如何隐藏子复选框而不隐藏父复选框?
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
def main():
app = QApplication (sys.argv)
tree = QTreeWidget ()
headerItem = QTreeWidgetItem()
item = QTreeWidgetItem()
for i in xrange(2):
parent = QTreeWidgetItem(tree)
parent.setText(0, "Parent {}".format(i))
parent.setFlags(parent.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
parent.setExpanded(True)
parent.setCheckState(0, Qt.Unchecked)
for x in xrange(3):
child = QTreeWidgetItem(parent)
child.setFlags(child.flags() & ~(Qt.ItemIsSelectable | Qt.ItemIsUserCheckable))
child.setText(0, "Child {}".format(x))
#child.setCheckState(0, Qt.Unchecked)
tree.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
您应该从 child flags 中删除标志 ItemIsUserChechable
和 ItemIsSelectable
而不是添加它们:
child.setFlags(child.flags() & ~(Qt.ItemIsSelectable | Qt.ItemIsUserCheckable))
我还希望您不应该设置 child 的 checkState,而应设置 parent 的 checkState。 有关二元运算的更多信息,请参阅 python documentation。
此处 "child.setCheckState(0, Qt.Unchecked)" -- 确实意味着“您正在将复选框设置为未选中状态的“0”列”。
现在重新访问您的代码:
您没有将其设置为您想要的 parent,因此请执行以下操作:
为 parent 项设置复选框:
parent.setCheckState(0, Qt.Unchecked)
完全删除下面的代码,因为它为 child 设置了您不需要的复选框
child.setCheckState(0, Qt.Unchecked)
同时删除标志设置,因为我们注意到将标志设置为 parent,并被传送到 child 项。
代码在第一个 for 循环中大致看起来像这样:
parent = QTreeWidgetItem(tree)
parent.setText(0, "Parent {}".format(i))
parent.setExpanded(True)
parent.setCheckState(0, Qt.Unchecked)
for x in xrange(3):
child = QTreeWidgetItem(parent)
child.setText(0, "Child {}".format(x))