Под-класс, вероятно, является самым простым выбором (хотя одно и то же может быть достигнуто с помощью фильтра событий).
Этот примерный код очистит выбор при нажатии на пустую область или при нажатии ключ 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)