Hi Leute,
ich habe eine Listbox im multiple modus und habe die Events <Button-1> und <space> gebunden. Ich verwalte damit eine liste der selektierten einträge um andere anzeigen upzudaten.
Jetzt ist es aber so, dass der handler vor dem selektieren eines elements zu laufen scheint, wobei die currselection die letzte änderung nicht beinhaltet. ich bekomm die letzte änderung der selektion also immer erst beim nächsten event mit. Bei <Button-1> ist die lösung einfach, ich verwende jetzt <ButtonRelease-1>. Gibt es auch ein <KeyRelease> oder eine andere möglichkeit den handler nach änderung der selektion auszuführen?
CU
Aydan
Listbox selection & events
Danke,
das war genau das was ich brauchte.
Jetzt hab ich grad noch ein anderes Problem. Kann ich die default bindings so modifizieren, dass in multiple modus mit doppelklick selektieren/deselektieren kann und mit einfach klick den cursor versetzen?
das war genau das was ich brauchte.
Jetzt hab ich grad noch ein anderes Problem. Kann ich die default bindings so modifizieren, dass in multiple modus mit doppelklick selektieren/deselektieren kann und mit einfach klick den cursor versetzen?
Mittlerweile hab ich das mit dem rebinding hinbekommen, allerdings funktionierts noch nicht ganz so toll. Wenn ich im MULTIPLE Modus runtergescrollt habe und dann auf einen Eintrag klicke, dann springt sie Anzeige ganz nach oben.
Hier der Code:
Hier der Code:
Code: Alles auswählen
from Tkinter import *
class MyListbox(Listbox):
def __init__(self,master=None,cnf={},**kw):
apply(Listbox.__init__,(self,master),kw)
#rebind events
self.bind('<Button-1>',self._Button1)
self.bind('<Double-Button-1>',self._Doublebutton1)
def _Button1(self,event):
#print(dir(event))
mode=event.widget['selectmode']
if mode==MULTIPLE:
index=event.widget.index('@%d,%d'%(event.x,event.y))
pos=event.widget.yview()[0]
print 'pos=',pos
event.widget.activate(index)
#hier versuche ich den aktuell geklickten index sichtbar zu machen
#event.widget.see(index)
event.widget.after(100,event.widget.yview,'moveto',pos)
return 'break'
def _Doublebutton1(self,event):
mode=event.widget['selectmode']
if mode==MULTIPLE:
i=event.widget.index('@%d,%d'%(event.x,event.y))
if event.widget.select_includes(i):
event.widget.selection_clear(i)
else:
event.widget.selection_set(i)
return 'break'