📜  tkinter 工具提示 (1)

📅  最后修改于: 2023-12-03 15:05:36.225000             🧑  作者: Mango

Tkinter 工具提示

Tkinter 是 Python 的标准 GUI 库。在 Tkinter 中, 工具提示是一种非常实用的功能,允许您在用户将鼠标悬停在控件上时显示一个消息。

创建一个基本的工具提示

创建基本工具提示的步骤如下:

  1. 导入 Tkinter 库。
  2. 创建一个控件。
  3. 创建一个 ToolTip 类并且把控件作为初始化的参数。
  4. 导入鼠标进入、鼠标移出事件并且设置在控件上。
  5. 在这些事件中调用 ToolTip 类来显示或隐藏消息。

以下是一个基本的示例:

import tkinter as tk

class ToolTip:
    def __init__(self, widget, text):
        self.widget = widget
        self.text = text
        self.tip_window = None
        
    def show_tip(self):
        # 显示工具提示
        if self.tip_window or not self.text:
            return
        x, y, _cx, cy = self.widget.bbox('insert')
        x = x + self.widget.winfo_rootx() + 25
        y = y + cy + self.widget.winfo_rooty() + 20
        self.tip_window = tw = tk.Toplevel(self.widget)
        tw.wm_overrideredirect(True)
        tw.wm_geometry('+%d+%d' % (x, y))
        label = tk.Label(tw, text=self.text, justify=tk.LEFT,
                      background="#ffffe0", relief=tk.SOLID, borderwidth=1,
                      font=("tahoma", "8", "normal"))
        label.pack(ipadx=1)
        
    def hide_tip(self):
        # 隐藏工具提示
        if self.tip_window:
            self.tip_window.destroy()
        self.tip_window = None
        
def create_tooltip(widget, text):
    # 创建工具提示
    toolTip = ToolTip(widget, text)
    widget.bind('<Enter>', lambda x: toolTip.show_tip())
    widget.bind('<Leave>', lambda x: toolTip.hide_tip())

然后用 create_tooltip 函数来创建一个工具提示。

root = tk.Tk()
root.geometry('300x200')

my_label = tk.Label(root, text="Hello, World!")
my_label.pack(pady=20)

create_tooltip(my_label, "This is a tooltip!")

root.mainloop()

当用户将鼠标悬停在标签上时,将会显示出 "This is a tooltip!" 的文本。

自定义工具提示

创建自定义工具提示包括创建一个带有文本和样式的弹出窗口。下面是一个包含自定义样式的示例:

import tkinter as tk

class ToolTip:
    def __init__(self, widget, text, bg="#FFF", fg="#000", font=("Arial", 10)):
        self.widget = widget
        self.text = text
        self.widget.bind("<Enter>", self.show_tip)
        self.widget.bind("<Leave>", self.hide_tip)
        self.tw = None
        self.bg = bg
        self.fg = fg
        self.font = font

    def show_tip(self, event):
        x, y = self.widget.winfo_rootx() + 20, self.widget.winfo_rooty() + 20
        self.tw = tk.Toplevel(self.widget)
        self.tw.attributes("-topmost", "true")
        self.tw.overrideredirect(True)
        self.tw.geometry("+%d+%d" % (x, y))
        self.tw.configure(bg=self.bg)
        label = tk.Label(self.tw, text=self.text, justify=tk.LEFT, bg=self.bg,
                      fg=self.fg, relief=tk.SOLID, borderwidth=1, font=self.font)
        label.pack(ipadx=1)

    def hide_tip(self, event):
        if self.tw:
            self.tw.destroy()

def create_tooltip(widget, text, bg="#FFF", fg="#000", font=("Arial", 10)):
    toolTip = ToolTip(widget, text, bg, fg, font)
    return toolTip

调用 create_tooltip 函数来创建一个带有自定义背景颜色、字体颜色与字体大小的工具提示:

root = tk.Tk()
root.geometry('300x200')

my_label = tk.Label(root, text="Hello, World!")
my_label.pack(pady=20)

tool_tip = create_tooltip(my_label, "This is a tooltip!", bg="lightblue", fg="darkblue", font=("Verdana", 12))

root.mainloop()

当用户将鼠标悬停在标签上时,将会显示出一个带有自定义背景颜色、字体颜色和字体大小的工具提示。

总结

Tkinter 工具提示在创建 GUI 应用程序时是非常重要的,因为它可以使应用程序更加交互和用户友好。使用 tkinter 库中的标准库函数也可以自定义工具提示的样式,以适应不同的应用程序风格。