使用Python Tkinter:始终在顶部窗口中不显示自定义类工具提示文本

时间:2012-02-03 20:50:57

标签: python tkinter

我无法使用工具提示来处理我常常在顶部的窗口。显然问题是你不能在总是排在最前面的东西之上创造一些东西;所以我想知道是否有解决方法或解决方案。 Popup需要始终位于其他窗口之上,但我还需要正确显示所有工具提示。

这是我到目前为止的精简版:

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()

1 个答案:

答案 0 :(得分:9)

我通过将tw.wm_attributes("-topmost", 1)添加到showtip函数来修复它。如果此解决方案不正确或有更好的方法,请告诉我。