Problème avec le focus sur une listbox
Bonjour à tous,
J'essaye de créer une listbox que je veux parcourir dès que l'interface graphique est ouvert.
Ce que j'ai écrit fonctionne bien quand j'amène le curseur de la souris dans la listbox et clique gauche sur une ligne:
je récupère le contenu de la ligne sélectionnée et je lance un sous-programme avec ce contenu en paramètre.
Je souhaiterai avoir la main avec les flèches "monter" et "descendre" directement quand j'entre sur la listebox mais sans cliquer sur une ligne.
J'ai essayé avec la ligne self.L.bind('<Enter>',self.__call__), mais ça ne fonctionne pas (problème d'arguments manquants ou en trop)
où est l'erreur
Voici mon programme:
Code:
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
| import tkinter as tk
class TestAfter(tk.Tk):
def __init__(self,parent=None):
tk.Tk.__init__(self,parent)
self.parent=parent
self.F1=tk.Frame(self)
self.s=tk.Scrollbar(self.F1)
self.L=tk.Listbox(self.F1)
#self.L.bind('<Enter>',self.__call__)
#self.L.bind('<Leave>',self.ArretAfter)
self.s.pack(side=tk.RIGHT,fill=tk.Y)
self.L.pack(side=tk.LEFT,fill=tk.Y)
self.L['yscrollcommand']=self.s.set
self.s['command']=self.L.yview
for i in range(30):
self.L.insert(tk.END,str(i))
self.F1.pack(side=tk.TOP)
self.L.selection_set(0)
#self.L.focus_force()
self.F2=tk.Frame()
self.lab=tk.Label(self.F2)
self.lab.pack()
self.F2.pack(side=tk.TOP)
self.sel=()
def __call__(self):
self.p=self.lab.after(200,self.__call__)
if self.L.curselection()!=self.sel:
self.sel=self.L.curselection()
self.lab.config(text=str(self.sel[0]))
self.LancerProgramme(self.sel)
#def ArretAfter(self):
# self.lab.after_cancel(self.p)
def LancerProgramme(sel,x):
print("Programme lancé avec",x)
if __name__=="__main__":
test=TestAfter(None)
test.title("Test after dans une classe")
test()
test.mainloop() |