首页 > 解决方案 > 为什么后台会出现ToolTip

问题描述

我搜索 tkinter 应用程序的工具提示。现在我在 youtube 上找到了一个例子。但是这个ToolTip出现在后台,没什么用。我怎样才能将它始终放在我的应用程序前面,以便用户意识到它?

查看我的图片:工具提示文本出现在我的应用程序窗口后面。如何将它移到我的应用程序前面?

工具提示,快照

杰克·舒茨曼https://youtu.be/MC9nuMBd390

from tkinter import *
class CreateToolTip(object):
    def __init__(self, widget, text='widget info'):
        self.waittime = 500
        self.wraplength = 180
        self.widget = widget
        self.text = text
        self.widget.bind('<Enter>', self.enter)
        self.widget.bind('<Leave>', self.leave)
        self.widget.bind('<ButtonPress>', self.leave)
        self.id = None
        self.tw = None
        
    def enter(self, event = None):
        self.schedule()
        
    def leave(self, event = None):
        self.unschedule()
        self.hidetip()
        
    def schedule(self):
        """ Show the tip """
        self.unschedule()
        self.id = self.widget.after(self.waittime, self.showtip)
        
    def unschedule(self):
        id = self.id
        self.id = None
        if id:
            self.widget.after_cancel(id)
            
    def showtip(self, event=None):
        """ Create the window for the tip """
        x = y = 0
        x, y, cx, cy = self.widget.bbox("insert")
        # The shift from top/left of the widget, for the tip to show
        x += self.widget.winfo_rootx() + 25
        y += self.widget.winfo_rooty() + 20
        # creates a toplevel toplevel window (like Frame, used for pop upor dialogue)
        self.tw = Toplevel(self.widget)
        # Leaves only the label and removes the app window decorations (wm -window manager)
        self.tw.wm_overrideredirect(True)
        # self.tw.wm_overrideredirect(False) # to see the windo decorations
        self.tw.wm_geometry("+%d+%d" % (x,y))
        
        # For Mac OS
        try:
            self.tw.tk.call("::tk::unsupported::MacWindowStyle",
                            "style", self.tw._w,
                            "help", "noActivates")
        except TclError:
            pass
        label = Label(self.tw, text=self.text, justify='left',
                      background="white", relief='solid', borderwidth=1,
                      wraplength= self.wraplength)
        label.pack(ipadx=1)
        
    def hidetip(self):
        tw = self.tw
        self.tw= None
        if tw:
            tw.destroy()

我还需要mybe,我如何使用它。

import tkinter as tk
from tkinter import ttk
import ToolTip

....

loadbtn = tk.Button(labelframe, text='Load', width=15, command=self.buttonLoadIni)
loadbtn.grid(row=1,column=0, padx=10, pady=5)
ToolTip.CreateToolTip(loadbtn, 'Load the Settings.ini file')

供你参考:

import tkinter as tk
from tkinter import ttk
import ToolTip

def load():
    pass

root = tk.Tk()
loadbtn = tk.Button(root, text='Load', width=15, command=load)
loadbtn.grid(row=1,column=0, padx=10, pady=5)
ToolTip.CreateToolTip(loadbtn, 'Load the Settings.ini file')

root.mainloop()

工具提示定位错误:在此处输入图像描述

良好的定位(内置)-也许可以使用???: 在此处输入图像描述

标签: python-3.xtkintertooltip

解决方案


推荐阅读