Я не могу заставить всплывающую подсказку работать с моим всегда в верхнем окне.Очевидно, проблема в том, что вы не можете создать что-то поверх чего-то, что всегда находится сверху;поэтому мне было интересно, если есть обходной путь или решение.Всплывающее окно должно быть всегда поверх других окон, но мне также нужно, чтобы все всплывающие подсказки отображались правильно.
Вот урезанная версия того, что у меня есть:
from Tkinter import *
class GUI:
def __init__(self, root):
Popup = Toplevel(root)
Popup.resizable(0,0)
Popup.attributes("-toolwindow", 1)
Popup.wm_attributes("-topmost", 1)
PFrame = Frame(Popup)
self.B = Button(PFrame, width=10,height=10)
self.B.pack()
self.createToolTip(self.B,"Click this button.")
PFrame.pack()
class ToolTip(object):
def __init__(self, widget):
self.widget = widget
self.tipwindow = None
self.id = None
self.x = self.y = 0
def showtip(self, text):
self.text = text
if self.tipwindow or not self.text: return
x,y,cx,cy = self.widget.bbox("insert")
x = x + self.widget.winfo_rootx() +15
y = y + cy + self.widget.winfo_rooty() +65
self.tipwindow = tw = Toplevel(self.widget)
tw.wm_overrideredirect(1)
tw.wm_geometry("+%d+%d"%(x,y))
label = Label(tw, text=self.text, justify=LEFT)
label.pack(ipadx=1)
def hidetip(self):
tw = self.tipwindow
self.tipwindow = None
if tw: tw.destroy()
def createToolTip(self,widget,text):
toolTip = self.ToolTip(widget)
def enter(event): self.tt = root.after(1500,show,event)
def show(event): toolTip.showtip(text)
def leave(event):
if self.tt: root.after_cancel(self.tt)
toolTip.hidetip()
widget.bind('<Enter>', enter)
widget.bind('<Leave>', leave)
if __name__ == '__main__':
root = Tk()
App = GUI(root)
root.mainloop()