QTreeView свернутые папки по умолчанию
Скажите, каким образом можно сделать так, чтобы названия папок были свернуты по-умолчанию (при открытии)?
from PyQt5 import QtCore, QtGui, QtWidgets
tree = {
'child 1-2': [],
'child 1-3': ["child 1-1-1"],
'children 2-1': ["..."],
"parent 2": ["..."],
"parent 3": [],
"parent 4": []
}
tree['parent 1'] = {}
tree['parent 1']['child1'] = {}
tree['parent 1']['child1']['child2'] = {}
tree['parent 1']['child1']['child2']['child3'] = ['elem1', 'elem2']
tree['parent 1']['child1']['child3'] = {}
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.tree_view = QtWidgets.QTreeView()
self.setCentralWidget(self.tree_view)
model = QtGui.QStandardItemModel()
self.populateTree(tree, model.invisibleRootItem())
self.tree_view.setModel(model)
model.setHeaderData(0, QtCore.Qt.Horizontal, 'Записи')
self.tree_view.expandAll()
self.tree_view.selectionModel().selectionChanged.connect(self.onSelectionChanged)
def populateTree(self, children, parent):
for child in children:
child_item = QtGui.QStandardItem(child)
parent.appendRow(child_item)
if isinstance(children, dict):
self.populateTree(children[child], child_item)
def onSelectionChanged(self, *args):
print(self.tree_view.selectedIndexes())
for sel in self.tree_view.selectedIndexes():
val = "/"+sel.data()
while sel.parent().isValid():
sel = sel.parent()
val = "/"+ sel.data()+ val
print(val)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Спасибо заранее!
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
void QTreeView::expandAll()
Разворачивает все расширяемые элементы.
Предупреждение: если модель содержит большое количество элементов, выполнение этой функции может занять некоторое время.
from PyQt5 import QtCore, QtGui, QtWidgets
tree = {
'child 1-2': [],
'child 1-3': ["child 1-1-1"],
'children 2-1': ["..."],
"parent 2": ["..."],
"parent 3": [],
"parent 4": []
}
tree['parent 1'] = {}
tree['parent 1']['child1'] = {}
tree['parent 1']['child1']['child2'] = {}
tree['parent 1']['child1']['child2']['child3'] = ['elem1', 'elem2']
tree['parent 1']['child1']['child3'] = {}
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.tree_view = QtWidgets.QTreeView()
self.setCentralWidget(self.tree_view)
model = QtGui.QStandardItemModel()
self.populateTree(tree, model.invisibleRootItem())
self.tree_view.setModel(model)
model.setHeaderData(0, QtCore.Qt.Horizontal, 'Записи')
# self.tree_view.expandAll() # --- !!!
self.tree_view.selectionModel().selectionChanged.connect(self.onSelectionChanged)
def populateTree(self, children, parent):
for child in children:
child_item = QtGui.QStandardItem(child)
parent.appendRow(child_item)
if isinstance(children, dict):
self.populateTree(children[child], child_item)
def onSelectionChanged(self, *args):
print(self.tree_view.selectedIndexes())
for sel in self.tree_view.selectedIndexes():
val = "/"+sel.data()
while sel.parent().isValid():
sel = sel.parent()
val = "/"+ sel.data()+ val
print(val)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
