def eventFilter(self, obj, event): """ Filter events if this object has been installed as an event filter for the watched object. Arguments: obj (QObject): Watched object. event (QEvent): Event being processed. Returns: bool: True if event should be filtered out (i.e. if further processing should be stopped); False otherwise. """ res = True if obj == self._list: if event.type() == QEvent.Leave: self._setSelected(0) res = False else: if event.type() == QEvent.MouseMove: if not self._list.viewport().rect().contains(event.pos()): self._setSelected(0) elif self._list.itemAt(event.pos()): row = self._list.row(self._list.itemAt(event.pos())) + 1 self._setSelected(row) elif event.type() == QEvent.MouseButtonRelease: self._accept() elif event.type() in [ QEvent.MouseButtonPress, QEvent.MouseButtonDblClick ]: pass else: res = False if res: return True else: return QMenu.eventFilter(self, obj, event)