From 9feb6887103d8066c24a1dc9d12ae2b62a506abc Mon Sep 17 00:00:00 2001 From: Zsolt Kovari Date: Mon, 21 Feb 2022 10:41:17 +0100 Subject: [PATCH] Add InstantTooltipEventFilter --- demo.py | 3 +++ qthandy/filter.py | 18 ++++++++++++++++++ test/test_filter.py | 15 +++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 qthandy/filter.py create mode 100644 test/test_filter.py diff --git a/demo.py b/demo.py index 5881043..a4ba2d5 100644 --- a/demo.py +++ b/demo.py @@ -4,6 +4,7 @@ from qtpy.QtWidgets import QMainWindow, QApplication, QWidget from qthandy import underline, bold, vbox, btn_popup_menu, ask_confirmation +from qthandy.filter import InstantTooltipEventFilter class MainWindow(QMainWindow): @@ -19,6 +20,8 @@ def __init__(self, parent=None): bold(self.lbl) self.btnWithMenu = QPushButton('Btn with menu') + self.btnWithMenu.setToolTip('Test tooltip') + self.btnWithMenu.installEventFilter(InstantTooltipEventFilter(self.btnWithMenu)) menu = QMenu(self.btnWithMenu) menu.addAction('Test', lambda: ask_confirmation('Test')) diff --git a/qthandy/filter.py b/qthandy/filter.py new file mode 100644 index 0000000..ce839a8 --- /dev/null +++ b/qthandy/filter.py @@ -0,0 +1,18 @@ +from qtpy.QtCore import QObject, QEvent +from qtpy.QtGui import QCursor +from qtpy.QtWidgets import QWidget, QToolTip + + +class InstantTooltipEventFilter(QObject): + def __init__(self, parent=None): + super(InstantTooltipEventFilter, self).__init__(parent) + + def eventFilter(self, watched: QObject, event: QEvent) -> bool: + print('event') + if isinstance(watched, QWidget) and event.type() == QEvent.Enter: + print('show') + QToolTip.showText(QCursor.pos(), watched.toolTip()) + elif event.type() == QEvent.Leave: + QToolTip.hideText() + + return super(InstantTooltipEventFilter, self).eventFilter(watched, event) diff --git a/test/test_filter.py b/test/test_filter.py new file mode 100644 index 0000000..3dd4333 --- /dev/null +++ b/test/test_filter.py @@ -0,0 +1,15 @@ +from qtpy.QtWidgets import QPushButton, QToolTip + +from qthandy.filter import InstantTooltipEventFilter + + +def test_instant_tooltip(qtbot): + btn = QPushButton('Button') + qtbot.addWidget(btn) + btn.show() + + btn.setToolTip('Test button') + btn.installEventFilter(InstantTooltipEventFilter(btn)) + qtbot.mouseMove(btn) + + assert QToolTip.isVisible()