On Tue, 2023-09-12 at 20:51 +0200, Mirko via Python-list wrote: > Am 12.09.23 um 07:43 schrieb John O'Hagan via Python-list: > > > My issue is solved, but I'm still curious about what is happening > > here. > > MRAB already said it: When you enter the callback function, Tk's > mainloop waits for it to return. So what's happening is: > > 1. Tk's mainloop pauses > 2. temp_unbind() is called > 3. TreeviewSelect is unbound > 4. events are queued > 5. TreeviewSelect is bound again > 6. temp_unbind() returns > 7. Tk's mainloop continues with the state: > - TreeviewSelect is bound > - events are queued > > [. . .]
Thanks (also to others who have explained), now I get it! > FWIW, here's a version without after(), solving this purely on the > python side, not by temporarily unbinding the event, but by > selectively doing nothing in the callback function. > > from tkinter import * > from tkinter.ttk import * > > class Test: > def __init__(self): > self.inhibit = False > root=Tk() > self.tree = Treeview(root) > self.tree.pack() > self.iid = self.tree.insert('', 0, text='test') > Button(root, command=self.temp_inhibit).pack() > mainloop() > > def callback(self, *e): > if not self.inhibit: > print('called') > > def temp_inhibit(self): > self.inhibit = True > self.tree.selection_set(self.iid) > self.tree.selection_remove(self.iid) > self.tree.selection_set(self.iid) > self.inhibit = False > self.callback() > > c=Test() > I like this solution better - it's much more obvious to me what it's doing. Regards John -- https://mail.python.org/mailman/listinfo/python-list