How to detect QTreeWidgetItem is double-clicked in PySide
GOAL
Today’s goal is to execute a function when QTreeWidgetItem is double clicked.
Environment
Windows 10
Python 3.8.7
PySide2 (5.15.2)
Method
First I created a sample QTreeWidget as below.

import sys
from PySide2.QtWidgets import *
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.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.tree_widget.setSelectionBehavior(QAbstractItemView.SelectItems)
main_layout.addWidget(self.tree_widget)
def _init_tree_widget(self):
headers = ["header1", "header2"]
self.tree_widget.setHeaderLabels(headers)
tree_widget_item1 = QTreeWidgetItem(["group1"])
tree_widget_item1.addChild(QTreeWidgetItem(["item1_1", "item1_2"]))
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", "item2_2"]))
tree_widget_item2.addChild(QTreeWidgetItem(["item3_1", "item3_2"]))
def launch():
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
widget = MyMainWindow()
widget.show()
app.exec_()
launch()1. How to detect that item is double clicked
Connect the function to QTreeWidget.itemDoubleClicked signal.
class MyMainWindow(QMainWindow):
def __init__(self, parent=None):
# omitted
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.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.tree_widget.setSelectionBehavior(QAbstractItemView.SelectItems)
self.tree_widget.itemDoubleClicked.connect(self._doubleClicked) # connect function to the signal itemDoubleClicked
main_layout.addWidget(self.tree_widget)
def _init_tree_widget(self):
# omitted
def _doubleClicked(self): # this function is executed when an item is double clicked
print("double clicked")2. How to get double clicked item
Use QTreeWidget.currentItem(), QTreeWidget.currentColumn() or QAbstractItemView.currentIndex().
def _doubleClicked(self):
column = self.tree_widget.currentColumn()
text = self.tree_widget.currentItem().text(column)
print("double clicked item is " + text)
# output when item1_2 clicked => double clicked item is item1_2
# output when group1 clicked => double clicked item is grounp1