【发布时间】:2021-11-16 18:50:19
【问题描述】:
我有这个 QTreeWidget,我希望默认扩展它。
我已经多次阅读同样的问题,但解决方案对我不起作用。我尝试了树根的命令:
.ExpandAll() 和 .itemsExpandable()
对于孩子们.setExpanded(True) 没有成功。
这是我的测试应用程序的代码:
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (
QApplication, QMainWindow, QWidget,
QTreeWidget, QTreeWidgetItem, QVBoxLayout
)
# ----------------------------------------------------------------
unsorted_data = [
['att_0', 'a', 2020],
['att_0', 'a', 2015],
['att_2', 'b', 5300],
['att_0', 'a', 2100],
['att_1', 'b', 5013],
['att_1', 'c', 6500],
]
# Sort data
list_att = []
for elem in range(len(unsorted_data)) :
att_ = unsorted_data[elem][0]
if att_ not in list_att:
list_att.append(att_)
list_att.sort()
n_att = len(list_att)
data = ['']*n_att
tree = ['']*n_att
list_a_number = []
list_b_number = []
list_c_number = []
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QWidget()
layout = QVBoxLayout()
widget.setLayout(layout)
# QTreeWidget
main_tree = QTreeWidget()
main_tree.setHeaderLabel('Test')
# main_tree.itemsExpandable() # NOT WORKING
# main_tree.expandAll() # NOT WORKING
sublevel_1 = []
for i, att in enumerate(list_att) :
list_a_number.clear()
list_b_number.clear()
list_c_number.clear()
# Create a dictionary
for elem in range(len(unsorted_data)) :
if unsorted_data[elem][0] == att :
if unsorted_data[elem][1]== 'a' :
list_a_number.append(str(unsorted_data[elem][2]))
if unsorted_data[elem][1] == 'b' :
list_b_number.append(str(unsorted_data[elem][2]))
if unsorted_data[elem][1] == 'c' :
list_c_number.append(str(unsorted_data[elem][2]))
data[i] = {'a' : list_a_number, 'b' : list_b_number, 'c' : list_c_number}
# Fill the Tree
items = []
att_id = list_att[i].split('\\')[-1]
tree[i] = QTreeWidgetItem([att_id])
tree[i].setExpanded(True) # NOT WORKING
sublevel_1.append(tree[i])
for key, values in data[i].items():
item = QTreeWidgetItem([key])
item.setCheckState(0, Qt.Checked)
tree[i].addChild(item)
for value in values :
child = QTreeWidgetItem([value])
child.setExpanded(True) # NOT WORKING
child.setCheckState(0, Qt.Checked)
item.addChild(child)
items.append(item)
main_tree.insertTopLevelItems(0, sublevel_1)
layout.addWidget(main_tree)
self.setCentralWidget(widget)
# ------------------------------------------------------------------
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
【问题讨论】:
标签: python pyqt5 qtreewidget