1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #! /usr/bin/python
import Tkinter as tk
class infoBulle(tk.Toplevel):
def __init__(self,parent=None,texte=''):
tk.Toplevel.__init__(self,parent,bd=1,bg='black')
self.parent=parent
self.withdraw()
self.overrideredirect(1)
self.transient()
l=tk.Label(self,text=texte,justify='left',bg='yellow')
l.pack()
l.update_idletasks()
self.tipwidth = l.winfo_width()
self.tipheight = l.winfo_height()
self.parent.bind('<Enter>',self.affiche)
self.parent.bind('<Button-1>',self.efface)
self.parent.bind('<Leave>',self.efface)
self.parent.bind('<Motion>',self.motion)
def affiche(self,event):
self.update_idletasks()
posX=self.parent.winfo_rootx()+event.x+10
posY=self.parent.winfo_rooty()+event.y+10
if posX + self.tipwidth > self.winfo_screenwidth():
posX = posX-self.winfo_width()-self.tipwidth
if posY + self.tipheight > self.winfo_screenheight():
posY = posY-self.winfo_height()-self.tipheight
self.geometry('+%d+%d'%(posX,posY))
self.deiconify()
self.update_idletasks()
def motion(self,event):
posX = self.parent.winfo_rootx()+event.x+10
posY = self.parent.winfo_rooty()+event.y+10
if posX + self.tipwidth > self.winfo_screenwidth():
posX = posX-self.winfo_width()-self.tipwidth
if posY + self.tipheight > self.winfo_screenheight():
posY = posY-self.winfo_height()-self.tipheight
self.geometry('+%d+%d'%(posX,posY))
self.update_idletasks()
def efface(self,event):
self.withdraw()
if __name__ == '__main__':
root = tk.Tk()
lab1=tk.Label(root,text='infobulle1')
lab1.pack()
lab2=tk.Label(root,text='Infobulle 2')
lab2.pack()
i1 = infoBulle(parent=lab1,texte="Infobulle 1")
i2= infoBulle(parent=lab2,texte="Infobulle 2")
root.mainloop() |
Partager