python tkinter 控件实现鼠标悬停提示,提示文本动态展示

ops/2024/11/27 21:15:03/

展示效果

在这里插入图片描述

全部代码和使用示例

python">#  _*_ coding:utf-8 _*_
import tkinter as tk
import pyautoguiscreen_width, screen_height = pyautogui.size()class WidgetTip:"""鼠标悬停提示"""def __init__(self, widget, text):self.widget = widgetself.text = textself.tips_alpha = 1self.tooltip = tk.StringVar()self.tip_pos = 5# 消息体self.tooltip_window = tk.Toplevel()self.init_tips()# 绑定鼠标事件self.widget.bind("<Enter>", self.enter)self.widget.bind("<Motion>", self.move)self.widget.bind("<Leave>", self.leave)def init_tips(self):"""初始化消息框"""self.tooltip_window.attributes("-alpha", 0)self.tooltip_window.attributes("-toolwindow", 1)self.tooltip_window.wm_overrideredirect(True)self.tooltip_window.attributes('-topmost', 100)pad_x = 20      # 内边距 xtk.Label(self.tooltip_window,textvariable=self.tooltip,background="#ffffff",justify=tk.LEFT,relief="solid",borderwidth=0,wraplength=screen_width - pad_x,padx=pad_x, pady=10).pack()def enter(self, event=None):self.tooltip_window.lift()if isinstance(self.text, (tk.StringVar, tk.IntVar, tk.BooleanVar, tk.DoubleVar)):tips_text = str(self.text.get())else:tips_text = str(self.text)self.tooltip.set(tips_text)self.set_tooltip_window_geometry(event)self.tooltip_window.attributes("-alpha", self.tips_alpha)def move(self, event=None):self.set_tooltip_window_geometry(event)def leave(self, event=None):self.tooltip_window.attributes("-alpha", 0)self.set_tooltip_window_geometry(event)def set_tooltip_window_geometry(self, event):cost_length = event.x_root + self.tip_pos + self.tooltip_window.winfo_width() - screen_widthif cost_length < 0:cost_length = 0self.tooltip_window.geometry("+%d+%d" % (event.x_root + self.tip_pos - cost_length, event.y_root + self.tip_pos))# 创建主窗口
root = tk.Tk()
root.title("鼠标悬停提示")var_str = tk.StringVar()# 创建一个按钮并添加 Tooltip
button = tk.Button(root, text="鼠标放这")
button.pack(pady=20)var_str.set('动态文本按钮')button2 = tk.Button(root, text=var_str.get())
button2.pack(pady=20)var_str.set('这是一条动态文本提示语')WidgetTip(button, "这是一条提示鼠标悬停提示信息")
WidgetTip(button2, var_str)# 运行主循环
root.mainloop()

http://www.ppmy.cn/ops/137174.html

相关文章

刘铁猛C#入门 026 重写与多态

类的继承 类成员的“横向扩展”(成员越来越多)类成员的“纵向扩展”(行为改变&#xff0c;版本增高)类成员的隐藏(不常用)重写与隐藏的发生条件&#xff1a;函数成员&#xff0c;可见&#xff0c;签名一致 函数成员:方法 、属性可见&#xff1a;父类修饰符是public protected …

决策树 DecisionTreeClassifier() 模型参数介绍

DecisionTreeClassifier() 是 scikit-learn 库中的决策树分类器&#xff0c;它有几个关键参数&#xff0c;用于控制模型的行为和性能。以下是其中一些重要的参数&#xff1a; criterion&#xff1a;用于划分节点的标准&#xff0c;可以是 ’gini’&#xff08;基尼指数&#xf…

naiveui 在 nuxt 中使用 css 资源首次未加载

naiveui 在 nuxt 中使用 css 资源首次未加载 我真的被气死&#xff0c;最近在最 nuxt 开发&#xff0c;ui 库使用的是 naiveui 然后我使用的过程中发现每一次我刷新页面的时候我页面出现的时候都没有 css 样式但是过一会就出现了 css 样式&#xff0c;我真的被气死了&#xff…

Python 版本的 2024详细代码

2048游戏的Python实现 概述&#xff1a; 2048是一款流行的单人益智游戏&#xff0c;玩家通过滑动数字瓷砖来合并相同的数字&#xff0c;目标是合成2048这个数字。本文将介绍如何使用Python和Pygame库实现2048游戏的基本功能&#xff0c;包括游戏逻辑、界面绘制和用户交互。 主…

Transformer.js(五) — Tokenizer 分词器接口解析 - 数据输入的咀嚼器

在之前的文章 前端大模型入门&#xff1a;编码(Tokenizer)和嵌入(Embedding)解析 - llm的输入中&#xff0c;我简单对比了下tokenizer和splitter的区别&#xff0c;以及其功能&#xff0c;让大家对分词器有了初步的认识。本篇文章中&#xff0c;我将带领大家深入探讨 transform…

macOS上进行Ant Design Pro实战教程(一)

由于一个AI项目的前端使用了umi&#xff0c;本教程根据阿里官网上的 《Ant Design 实战教程&#xff08;beta 版&#xff09;》来实操一下&#xff0c;我使用macOS操作系统&#xff0c;VS Code 开发环境。 一、开发环境 1、安装nodejs, npm, yarn 官网上建议使用cnpm&#xf…

Spring Boot项目中,实体类是否需要实现Serializable接口

在Spring Boot项目中&#xff0c;实体类是否需要实现Serializable接口并不是一个硬性规定&#xff0c;而是取决于具体的应用场景和需求。以下是对这一问题的更详细分析&#xff1a; 1. 序列化的基本概念 序列化是将对象的状态信息转换为可以存储或传输的形式的过程。反序列化则…

Vue学习记录11

模板引用 虽然Vue的声明性渲染模型抽象了大部分对DOM的直接操作&#xff0c;但在某些情况下&#xff0c;仍然需要直接访问底层DOM元素。要实现这一点&#xff0c;可以使用特殊的 ref attribute: <input ref"input"> ref是一个特殊的attribute,和 v-for中提到…