You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyQt5中自定义Tooltip(工具提示)的显示位置?

自定义QWidget工具提示的显示位置

要手动指定PyQt5中QWidget工具提示的显示位置,你可以通过拦截工具提示事件或手动控制提示的显示/隐藏来实现,以下是具体方案:

方法一:拦截ToolTip事件修改位置

重写目标QWidget的event()方法,捕捉QEvent.ToolTip类型事件后,自定义坐标并手动显示提示,替代默认的提示逻辑。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QEvent, Qt


class CustomTooltipWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setFixedSize(500, 500)
        self.tooltip_text = "自定义位置的Tooltip"

    def event(self, event):
        if event.type() == QEvent.ToolTip:
            # 将部件局部坐标转换为屏幕全局坐标,这里设置为部件左上角偏移(100,100)的位置
            global_pos = self.mapToGlobal(self.rect().topLeft()) + Qt.QPoint(100, 100)
            # 手动显示工具提示
            QToolTip.showText(global_pos, self.tooltip_text)
            # 标记事件已处理,避免默认提示触发
            event.accept()
            return True
        # 其他事件交给父类处理
        return super().event(event)


class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setMinimumSize(1920, 1080)
        self.showMaximized()

        self.widget = CustomTooltipWidget(self)
        self.widget.setVisible(True)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

方法二:手动控制提示的显示与隐藏

通过监听鼠标进入、离开和移动事件,完全自定义提示的显示时机和位置。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt


class CustomTooltipWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setFixedSize(500, 500)
        self.tooltip_text = "手动控制的Tooltip"

    def enterEvent(self, event):
        # 鼠标进入部件时,在右下角偏移位置显示提示
        global_pos = self.mapToGlobal(self.rect().bottomRight()) + Qt.QPoint(10, -50)
        QToolTip.showText(global_pos, self.tooltip_text)
        super().enterEvent(event)

    def leaveEvent(self, event):
        # 鼠标离开时隐藏提示
        QToolTip.hideText()
        super().leaveEvent(event)

    def mouseMoveEvent(self, event):
        # 鼠标移动时跟随更新提示位置(可选)
        global_pos = event.globalPos() + Qt.QPoint(10, 20)
        QToolTip.showText(global_pos, self.tooltip_text)
        super().mouseMoveEvent(event)


class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setMinimumSize(1920, 1080)
        self.showMaximized()

        self.widget = CustomTooltipWidget(self)
        self.widget.setVisible(True)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

关键说明

  • mapToGlobal()用于将部件内部的局部坐标转换为屏幕全局坐标,确保提示框位置不受窗口布局影响。
  • 你可以任意调整Qt.QPoint()的偏移数值,实现精准定位到屏幕或部件的任意位置。
  • 如果需要自定义提示框样式,可搭配QToolTip.setStyleSheet()修改字体、背景、边框等属性。

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:45:29