2012-02-03 3 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

私はshowtip関数にtw.wm_attributes("-topmost", 1)を追加することによってそれを修正しました。この解決方法が間違っているか、より良い方法があるかどうかを教えてください。

関連する問題