Подкласс, вероятно, является самым простым выбором (хотя то же самое может быть достигнуто с помощью фильтра событий).
Этот пример кода очистит выбор при нажатии на пустую область или при нажатииКлавиша Escape, когда виджет дерева имеет фокус клавиатуры:
class TreeWidget(QTreeWidget):
...
def keyPressEvent(self, event):
if (event.key() == Qt.Key_Escape and
event.modifiers() == Qt.NoModifier):
self.clearSelection()
else:
QTreeWidget.keyPressEvent(self, event)
def mousePressEvent(self, event):
if self.itemAt(event.pos()) is None:
self.clearSelection()
QTreeWidget.mousePressEvent(self, event)