2012-02-03 74 views
3

我无法使用工具提示与我始终在顶部窗口上工作。很显然,问题在于你无法在总是处于顶端的东西之上创造出一些东西;所以我想知道是否有解决方法或解决方案。弹出窗口需要始终在其他窗口之上,但我也需要让所有的工具提示正确显示。使用Python Tkinter:始终在顶部窗口上显示的不是自定义类工具提示文本

这里是什么,我至今一个精简版:

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

回答

8

我加入tw.wm_attributes("-topmost", 1)showtip功能固定它。让我知道这个解决方案是不正确的还是有更好的方法。

相关问题