Dear all in my application I have some toplevels that appear as InPlaceEdit for Listboxes when the user clicks a field in a listbox.
This time I've tried to create a 2 nested level toplevel, but I am completely losing the focus on the return and I didn't find any way to restore it. Bellow there is a small example just to demonstrate the problem By clicking the button it opens a toplevel, transient, overrideredirect(1) with a Text() which has the grab and the focus. Once you press a certain key (now the +) it opens a second level, another toplevel of a listbox with override and grab On return from the second toplevel the focus is completly lost. I cannot restore the focus on the text, I've tried to use focus_set(), grab_set etc.. but with no success. Any ideas? Where did the focus go and how why the focus_set() doesn't work Thanks in advance Vasilis from Tkinter import * # ======================================================== class TopList(Toplevel): def __init__(self, master): Toplevel.__init__(self, master) self.overrideredirect(1) self.transient(master) self.bind("<Escape>", self.close) self.l = Listbox(self, bg="Yellow") self.l.pack() self.l.bind("<ButtonRelease-1>", self.close) for item in ["one","two","three","four"]: self.l.insert(END,item) self.result = "" # ------------------------------------------------ def show(self): self.deiconify() self.wait_visibility() self.grab_set() self.l.focus_set() self.wait_window() self.grab_release() return self.result # ------------------------------------------------ def close(self, event=None): if event: self.result = self.l.get(self.l.nearest(event.y)) else: self.result = self.l.get(ACTIVE) self.destroy() # ======================================================== class TopText(Toplevel): def __init__(self, master): Toplevel.__init__(self, master) self.overrideredirect(1) self.transient(master) self.bind("<Escape>", self.close) self.t = Text(self, bg="White") self.t.pack() self.t.bind("<Key-plus>", self.openList) self.result = "" # ------------------------------------------------ def show(self): self.deiconify() self.wait_visibility() self.grab_set() self.t.focus_set() self.wait_window() return self.result # ------------------------------------------------ def close(self, event=None): self.result = self.t.get(1.0,END) self.destroy() # ------------------------------------------------ def openList(self, event=None): self.grab_release() result = TopList(self).show() self.t.focus_set() self.grab_set() self.t.insert("%s + 1 chars"%(INSERT),result) # ======================================================== def openText(): print TopText(tk).show() tk = Tk() e = Entry(tk) e.pack() e.focus_set() b = Button(tk, text="Text", command=openText) b.pack() tk.mainloop()
_______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org https://mail.python.org/mailman/listinfo/tkinter-discuss