Код: Выделить всё
def eventFilter(self, obj, event):
if isinstance(event, QWheelEvent) and QApplication.keyboardModifiers() == Qt.KeyboardModifier.ShiftModifier:
widget_under_mouse = QApplication.widgetAt(event.globalPosition().toPoint())
while widget_under_mouse is not None:
if isinstance(widget_under_mouse, QTextEdit): break
widget_under_mouse = widget_under_mouse.parent() # Move up in the hierarchy
if isinstance(widget_under_mouse, QTextEdit):
if h_scroll_bar := widget_under_mouse.horizontalScrollBar():
new_value = h_scroll_bar.value() - event.angleDelta().y()
h_scroll_bar.setValue(new_value)
return True
return super().eventFilter(obj, event)
< /code>
Проблема заключается в том, что этот фильтр активируется только тогда, когда я достигаю дна или начала текста в qtextedit. Я попытался установить его в разных местах:
at app = qapplication (...) < /code> Определение:
app.installEventFilter(ScrollFilter()) # ScrollFilter(QObject) beeing a class build around the filter < /code>
или внутри моего Mainwindow:
self.installEventFilter(self)< /code>
или с фактическим qtextedit:
self.my_text_edit.installEventFilter(self)
Каждый раз, когда я сталкивался с одной и той же проблемой. Может быть, это потому, что я не использую эту анонимную ссылку на возврат, но мне нужно знать корневой класс виджета, потому что у меня также есть другие виджеты, которые не позволяют прокручивать вертикально.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ft-in-pyqt