2017-03-31 171 views
0

我有一个QTreeWidget与两个级别。父级是下面的第一级和子级。我希望父级包含复选框,但我希望孩子没有复选框。在下面的例子中,每个QTreeWidgetItem显示一个复选框。如果我删除“child.setCheckState(0,Qt.Unchecked)”,那么所有复选框消失,而不仅仅是子复选框。QTreeWidgetItem隐藏子复选框,但不是父复选框

如何隐藏子复选框,但不是父复选框?

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() 

回答

1

这里的“child.setCheckState(0,Qt.Unchecked)” - 确实意味着“您将复选框设置为未选中状态的列”0“”。

现在重温代码:

你不将它设置为你想的那么做类似下面父:

集复选框父项:

parent.setCheckState(0, Qt.Unchecked) 

完全删除以下代码,因为它为您不想要的孩子设置复选框

child.setCheckState(0, Qt.Unchecked) 

此外,我们注意到设置标志为父项的标志设置将被带到子项目中。

代码粗略看起来有点像这样在第一个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)) 
+0

好的。我的示例代码与我的真实代码不匹配。我在上面的示例中添加了您的建议和m7913d的建议。不幸的是,孩子复选框仍然可见。 – panofish

+0

你完全删除了代码“child.setCheckState(0,Qt.Unchecked)” – Naidu

+0

我仍然在代码中看到这个“child.setCheckState(0,Qt.Unchecked)”。请完全删除 – Naidu

0

你应该从你的孩子flags删除标志ItemIsUserChechableItemIsSelectable而不是增加他们的:

child.setFlags(child.flags() & ~(Qt.ItemIsSelectable | Qt.ItemIsUserCheckable)) 

我也期望,你不应该设置孩子的checkState,但的父母。 有关二元操作的更多信息,请参阅python documentation

+0

良好的渔获物。我的示例代码与我的真实代码不匹配。我已经在上面的示例中添加了您的建议和pavanc的建议。不幸的是,孩子复选框仍然可见。您的建议阻止我检查它,但它不会隐藏复选框本身。 – panofish