Tkinter Button bind hover message

This is the hover message (tooltip-style) behavior into a reusable class is the right way to go.

python 复制代码
import tkinter as tk

class HoverTooltip:
    """A reusable tooltip class for Tkinter widgets."""

    def __init__(self, widget, text, offset=(10, 10)):
        self.widget = widget
        self.text = text
        self.offset = offset
        self.tooltip = None

        # Bind hover events
        widget.bind("<Enter>", self.show_tooltip)
        widget.bind("<Leave>", self.hide_tooltip)
        widget.bind("<Motion>", self.move_tooltip)

    def show_tooltip(self, event):
        """Display the tooltip near the cursor."""
        if self.tooltip or not self.text:
            return

        self.tooltip = tk.Toplevel(self.widget)
        self.tooltip.wm_overrideredirect(True)  # no window borders
        self.tooltip.attributes("-topmost", True)

        label = tk.Label(
            self.tooltip,
            text=self.text,
            bg="yellow",
            relief="solid",
            borderwidth=1,
            padx=5,
            pady=2,
        )
        label.pack(ipadx=1)

        # Position the tooltip initially
        self.move_tooltip(event)

    def move_tooltip(self, event):
        """Update tooltip position as the cursor moves."""
        if self.tooltip:
            x = event.x_root + self.offset[0]
            y = event.y_root + self.offset[1]
            self.tooltip.geometry(f"+{x}+{y}")

    def hide_tooltip(self, event):
        """Destroy the tooltip when cursor leaves."""
        if self.tooltip:
            self.tooltip.destroy()
            self.tooltip = None


# --- Example usage ---
if __name__ == "__main__":
    root = tk.Tk()
    root.title("Hover Tooltip Class Example")

    btn1 = tk.Button(root, text="Hover Me 1")
    btn1.pack(pady=10)

    btn2 = tk.Button(root, text="Hover Me 2")
    btn2.pack(pady=10)

    HoverTooltip(btn1, "This is the first button tooltip!")
    HoverTooltip(btn2, "Another helpful message here!")

    root.mainloop()

Another simple way

python 复制代码
# Import the tkinter library
from tkinter import *
from tkinter.tix import *

# Create an instance of tkinter frame
win = Tk()
# Set the geometry
win.geometry("400x200")

# Create a tooltip
tip = Balloon(win)

# Create a Button widget
my_button = Button(win, text="Python", font=('Helvetica bold', 20))
my_button.pack(pady=20)

# Bind the tooltip with button
tip.bind_widget(my_button, balloonmsg="Python is an interpreted, high-level and general-purpose programming language")

win.mainloop()
相关推荐
我星期八休息几秒前
Linux系统编程—库制作与原理
linux·运维·服务器·数据结构·人工智能·python·散列表
Cloud_Shy6187 分钟前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第十二章 用户定义函数 上篇)
python·数据分析·excel·pandas
Fuyo_111915 分钟前
C++中的活字印刷术——模板·初阶
开发语言·c++·笔记
在角落发呆16 分钟前
跨越网络鸿沟:传统文件传输与现代内网穿透的奇妙交响
开发语言·php
Season45019 分钟前
C++之模板元编程(前置知识 constexpr)
开发语言·c++
BU摆烂会噶22 分钟前
【LangGraph】House_Agent 实战(四):预定流程 —— 中断与人工干预
android·人工智能·python·langchain
AI玫瑰助手22 分钟前
Python运算符:比较运算符(等于不等等于大于小于)与返回值
android·开发语言·python
GIOTTO情34 分钟前
Infoseek舆情处置系统的技术实现与落地实践
python
计算机安禾44 分钟前
【c++面向对象编程】第40篇:单例模式(Singleton)的多种C++实现
开发语言·c++·单例模式
new_dev1 小时前
Python实现Android自动化打包工具:加固、签名、多渠道一键完成
android·python·自动化