# How to customize SubjectHierarchyTreeView?

**URL:** <https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358>\
**Category:** Support\
**Created:** [November 1, 2020, 10:12am UTC](https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358 "2020-11-01T10:12:01Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [November 1, 2020, 10:12am UTC](https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358/1 "2020-11-01T10:12:01Z")

</div>

Hi!  
I want to customize a SubjectHierarchyTreeView Widget in a module.

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/f/0/f012b3f94b4c8beb9ec14a38679adf2fda2fa921.png)

Things to change:

- Filter Model nodes: made

> self.uit.SubjectHierarchyTreeView.nodeTypes = [“vtkMRMLModelNode”]

- Change header text: “Node” → “Model”
- Hide columns: “ID”, “color”
- Change colums order: Put View/Hide first one
- Add new columns: should be lovely to add an “Opacity slider”, something like Segementations Module one.

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/a/0/a03cadac0726d9478ea8cfa07963b6021eb3c8d3.png)

Slicer ver: 4.11.20200930 r29402 / 002be18  
OS: Win10

Thanks on advace!

---

<div class="post-metadata">

**Author:** ![cpinter](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/cpinter/32/7995_2.png) [@cpinter](https://discourse.slicer.org/u/cpinter)\
**Post date:** [November 1, 2020, 9:08pm UTC](https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358/2 "2020-11-01T21:08:28Z")

</div>

> [@apparrilla](#):
>
> Hide columns: “ID”, “color”

```auto
subjectHierarchyTreeView.setColumnHidden(subjectHierarchyTreeView.model().idColumn, True)
subjectHierarchyTreeView.setColumnHidden(subjectHierarchyTreeView.model().colorColumn, True)

```

> [@apparrilla](#):
>
> Change header text: “Node” → “Model”

Probably something like this:  
`subjectHierarchyTreeView.model().setHorizontalHeaderLabels(['Models', ...])`

> [@apparrilla](#):
>
> Change colums order

I believe you can do it by calling functions like `setNameColumn` with the desired column index.

> [@apparrilla](#):
>
> Add new columns

I’m afraid for this you’ll need to extend or subclass the qMRMLSubjectHierarchyModel class.

---

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [November 3, 2020, 11:44pm UTC](https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358/3 "2020-11-03T23:44:51Z")

</div>

Hi @cpinter!  
Thanks to your answare, I´ve able to get this result:

![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/5/9/5974ce141b1eb13023e43284ed87cc939af1ed34.png)

This is my code:

> self.ui.SubjectHierarchyTreeView.nodeTypes = [“vtkMRMLModelNode”]  
> self.ui.SubjectHierarchyTreeView.setColumnHidden(self.uit.SubjectHierarchyTreeView.model().idColumn, True)  
> self.ui.SubjectHierarchyTreeView.setColumnHidden(self.uit.SubjectHierarchyTreeView.model().colorColumn, True)  
> self.ui.SubjectHierarchyTreeView.setColumnHidden(self.uit.SubjectHierarchyTreeView.model().transformColumn, True)  
> self.ui.SubjectHierarchyTreeView.model().setHorizontalHeaderLabels([‘Models’, …])  
> self.ui.SubjectHierarchyTreeView.setMRMLScene( slicer.mrmlScene )

I havent been able to change columns order after many attempts with different methods from [qMRMLSubjectHierarchyTreeView](https://discourse.slicer.org/t/populating-qmrmlsubjecthierarchytreeview/10776) Class and [qMRMLSubjectHierarchyModel](https://apidocs.slicer.org/v4.8/classqMRMLSubjectHierarchyModel.html) documentation.

Thank you very much for your help!

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [November 3, 2020, 11:56pm UTC](https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358/4 "2020-11-03T23:56:33Z")

</div>

You can show/hide and change the order of columns by specifying colorColumn, descriptionColumn, etc. values. See [documentation](http://apidocs.slicer.org/master/classqMRMLSubjectHierarchyModel.html).

---

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [November 4, 2020, 12:46am UTC](https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358/5 "2020-11-04T00:46:46Z")

</div>

Sorry @lassoan . I don´t know how to do it…  
Error message:

> line 200, in setup self.ui.SubjectHierarchyTreeView.model().setVisibilityColumn(0)  
> AttributeError: qMRMLSubjectHierarchyModel has no attribute named ‘setVisibilityColumn’

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [November 4, 2020, 2:23am UTC](https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358/6 "2020-11-04T02:23:55Z")

</div>

`colorColumn` is a property. You can set it as:

```
self.ui.SubjectHierarchyTreeView.model().visibilityColumn = 0

```

This documentation page can help in interpreting the API documentation: [https://slicer.readthedocs.io/en/latest/developer\_guide/api.html#doxygen-style-documentation](https://slicer.readthedocs.io/en/latest/developer_guide/api.html#doxygen-style-documentation)

---

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [November 4, 2020, 2:49pm UTC](https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358/7 "2020-11-04T14:49:20Z")

</div>

I´ve triyed:

> self.uit.SubjectHierarchyTreeView.model().visibilityColumn = 0  
> self.uit.SubjectHierarchyTreeView.model().nameColumn = 1  
> self.uit.SubjectHierarchyTreeView.model().descriptionColumn = 2

But result is the same:

![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/a/3/a3eace849337bd9633e3cbb7832b94a4949f250b.png)

Sorry to waste your precious time…!

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [November 4, 2020, 6:48pm UTC](https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358/8 "2020-11-04T18:48:57Z")

</div>

It works for me. Note that you need to change the headers label and icons with a separate call (it could be nice if that was updated automatically, if you have time to implement this then a pull request would be welcome):

```python
tv=slicer.qMRMLSubjectHierarchyTreeView()
tv.model().visibilityColumn=3
tv.model().colorColumn=2
tv.setMRMLScene(slicer.mrmlScene)
tv.model().setHorizontalHeaderLabels(['a','b','c','d','e','f'])
tv.show()

```

---

<div class="post-metadata">

**Author:** ![apparrilla](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/apparrilla/32/9230_2.png) [@apparrilla](https://discourse.slicer.org/u/apparrilla)\
**Post date:** [November 4, 2020, 10:13pm UTC](https://discourse.slicer.org/t/how-to-customize-subjecthierarchytreeview/14358/9 "2020-11-04T22:13:22Z")

</div>

Ok. My problem was the headers order and columns width. Items reorder in new columns distribution but but headers stay in original order.

> [@lassoan](#):
>
> it could be nice if that was updated automatically, if you have time to implement this then a pull request would be welcome

I´d like to help but it´s too much for my current poor code skills…

Thanks to all.
