如何设置QTreeWidget默认全部展开?PyQt5中相关方法失效该如何解决?
问题原因
你之前调用展开方法的时机不对:
- 你注释掉的
main_tree.expandAll()是在往树里插入节点之前执行的,此时树控件内还没有任何节点,调用展开方法自然不会生效 - 你对节点调用
setExpanded(True)的时候,要么节点还没有添加子节点,要么节点还没有被挂载到QTreeWidget控件上,操作不会生效 - 另外
itemsExpandable()是读取「所有节点是否可展开」属性的方法,本身不具备设置功能,要设置该属性需要调用setItemsExpandable(True),这个方法和默认展开功能没有直接关联
解决方法
最简单的方案是在所有节点都插入到QTreeWidget之后,再调用一次expandAll(),只需要修改一行代码的位置即可:
找到你代码里的这两行:
main_tree.insertTopLevelItems(0, sublevel_1) layout.addWidget(main_tree)
在这两行中间加一行main_tree.expandAll(),修改后如下:
main_tree.insertTopLevelItems(0, sublevel_1) main_tree.expandAll() # 移到此处即可生效 layout.addWidget(main_tree)
如果需要自定义部分节点展开、部分折叠,也可以等所有节点都添加完成后,再对应调用对应节点的setExpanded()方法即可。
内容的提问来源于stack exchange,提问作者drn_svq
相关产品推荐
相关产品推荐

