Bonjour, je cherche a realiser une info bulle qui suit le curseur de la souris quand on est dans une zone predefinie, un peu comme certaines infobulles javascript qu'on voit un peu partout.

J'ai teste un programme que j'ai trouve dans les forums.
Mais premierement, l'infobulle est "fixe" et sous FreeBSD le programme se lance correctement mais j'ai pas d'affichage (pas du tout de fenetre Tk).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
# -*- coding: ISO-8859-1 -*-
import Tkinter as tk
 
class infoBulle(tk.Toplevel):
	def __init__(self,parent=None,texte='',temps=1000):
		tk.Toplevel.__init__(self,parent,bd=1,bg='black')
		self.tps=temps
		self.parent=parent
		self.withdraw()
		self.overrideredirect(1)
		self.transient()     
		l=tk.Label(self,text=texte,bg="yellow",justify='left')
		l.update_idletasks()
		l.pack()
		l.update_idletasks()
		self.tipwidth = l.winfo_width()
		self.tipheight = l.winfo_height()
		self.parent.bind('<Enter>',self.delai)
		self.parent.bind('<Button-1>',self.efface)
		self.parent.bind('<Leave>',self.efface)
	def delai(self,event):
		self.action=self.parent.after(self.tps,self.affiche)
	def affiche(self):
		self.update_idletasks()
		posX = self.parent.winfo_rootx()+self.parent.winfo_width()
		posY = self.parent.winfo_rooty()+self.parent.winfo_height()
		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
		#~ print posX,print posY
		self.geometry('+%d+%d'%(posX,posY))
		self.deiconify()
	def efface(self,event):
		self.withdraw()
		self.parent.after_cancel(self.action)
 
if __name__ == '__main__':
	root = tk.Tk()
	lab1=tk.Label(root,text='Infobulle 1')
	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()