[Tips]How to Execute Function When Tab Opens in QTreeWidget
GOAL
Today’s goal is to implement PySide Widget where a function is executed when the tab is expanded. For example, the following is a function to print opened item name.

Environment
Windows 10
Python 3.8.7
PySide2 (5.15.2)
Method
Use itemExpanded
Connect target function to itemExpanded signal of QTreeWidget.
tree_widget = QTreeWidget()
tree_widget.itemExpanded.connect(self._display_opened_item)
def _display_opened_item(self, item):
print("Opened item is " + item.text(0))The completed code
The completed code will be as follows.
import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import Qt
class MyMainWindow(QMainWindow):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self._generate_ui()
self._init_tree_widget()
def _generate_ui(self):
main_widget = QWidget()
main_layout = QVBoxLayout()
main_widget.setLayout(main_layout)
self.setCentralWidget(main_widget)
self.tree_widget = QTreeWidget()
self.tree_widget.itemExpanded.connect(self._display_opened_item) #connect function here
main_layout.addWidget(self.tree_widget)
def _init_tree_widget(self):
self.tree_widget.setHeaderLabels(["header"])
tree_widget_item1 = QTreeWidgetItem(["group1"])
tree_widget_item1.addChild(QTreeWidgetItem(["item1_1"]))
self.tree_widget.addTopLevelItem(tree_widget_item1)
tree_widget_item2 = QTreeWidgetItem(["group2"])
self.tree_widget.addTopLevelItem(tree_widget_item2)
tree_widget_item2.addChild(QTreeWidgetItem(["item2_1"]))
tree_widget_item2.addChild(QTreeWidgetItem(["item2_2"]))
def _display_opened_item(self, item): # the function to execute
print("Opened item is " + item.text(0))
def launch():
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
widget = MyMainWindow()
widget.show()
app.exec_()
launch()
PostScript
To execute function when an item is collapsed, use itemCollapsed signal instead.