|
# https://stackoverflow.com/questions/27898718/multi-level-qtreeview |
|
import sys |
|
|
|
from qtpy.QtGui import QStandardItemModel, QStandardItem |
|
from qtpy.QtWidgets import QApplication, QWidget, QTreeView, QHBoxLayout |
|
|
|
import skimage.data |
|
|
|
from napari.components.layergroup import LayerGroup |
|
from napari.layers import * |
|
|
|
|
|
def small_tree(): |
|
tree = LayerGroup(name='small-tree') |
|
tree.append(Image(skimage.data.camera(), name='camera')) |
|
tree.append(Image(skimage.data.astronaut(), name='astronaut')) |
|
return tree |
|
|
|
|
|
def construct_layergroup_tree(): |
|
data = skimage.data.camera() |
|
|
|
tree = LayerGroup(name='tree') |
|
|
|
branch1 = LayerGroup(name='branch1') |
|
branch1.append(Image(data, name='image1_on_branch1')) |
|
branch1.append(Image(data, name='image2_on_branch1')) |
|
|
|
branch2 = LayerGroup(name='branch2') |
|
branch2.append(Image(data, name='image1_on_branch2')) |
|
|
|
branch3 = LayerGroup(name='branch3') |
|
branch4 = LayerGroup(name='branch4') |
|
branch5 = LayerGroup(name='branch5') |
|
branch4.append(Image(data, name='image1_on_branch4_on_branch3')) |
|
branch4.append(Image(data, name='image2_on_branch4_on_branch3')) |
|
branch5.append(Image(data, name='image1_on_branch5_on_branch3')) |
|
branch3.append(branch4) |
|
branch3.append(branch5) |
|
branch3.append(Image(data, name='image1_on_branch3')) |
|
|
|
tree.append(branch1) |
|
tree.append(branch2) |
|
tree.append(branch3) |
|
tree.append(Image(data, name='single_img')) |
|
|
|
return tree |
|
|
|
|
|
class MainFrame(QWidget): |
|
def __init__(self): |
|
QWidget.__init__(self) |
|
|
|
tree = construct_layergroup_tree() |
|
|
|
self.tree = QTreeView(self) |
|
self.tree.setIndentation(20) |
|
self.tree.setHeaderHidden(True) |
|
self.tree.setAlternatingRowColors(True) |
|
|
|
layout = QHBoxLayout(self) |
|
layout.addWidget(self.tree) |
|
|
|
root_model = QStandardItemModel() |
|
self.tree.setModel(root_model) |
|
root_item = QStandardItem(tree.name) |
|
root_model.invisibleRootItem().appendRow(root_item) |
|
self._populateTree(tree, root_item) |
|
self.tree.expandAll() |
|
|
|
def _populateTree(self, tree, parent): |
|
for child in tree: |
|
child_item = QStandardItem(child.name) |
|
parent.appendRow(child_item) |
|
if isinstance(child, LayerGroup): |
|
self._populateTree(child, child_item) |
|
|
|
|
|
if __name__ == "__main__": |
|
app = QApplication(sys.argv) |
|
main = MainFrame() |
|
main.show() |
|
sys.exit(app.exec_()) |