2017-03-31 252 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