PlotWidget на самом деле является подклассом QAbstractScrollArea, который является сложным виджетом, который имеет как минимум три дочерних виджета: полосы прокрутки (даже если они скрыты) и, что наиболее важно, область просмотра , который на самом деле является «содержимым» области прокрутки.
Это означает, что при использовании widgetAt()
вы получаете не виджет графика (область прокрутки), а его окно просмотра. Фактически, в вашем случае вы можете получить виджет графика, проверив родителя:
def wheelEvent(self, event):
hoveredWidget = QApplication.widgetAt(event.globalPos())
if hoveredWidget and hoveredWidget.parent():
print(hoveredWidget.parent().objectName())
Будьте осторожны при перехвате событий из родительского виджета, особенно для такого сложного виджета, как области прокрутки: это не гарантирует, что вы получит их, так как дети могут принять их, что предотвратит дальнейшее распространение их родителей.
Если вам нужен больший контроль над ними, обычно лучше реализовать соответствующие методы в их подклассы или установка фильтра событий на экземплярах.
Обратите внимание, что по вышеуказанной причине, если вы хотите фильтровать события в области прокрутки, вы можете установить фильтр в области просмотра:
self.graph.viewport().installEventFilter(self)