[Idle-dev] IDLE getpass?
taleinat at gmail.com
Sat Sep 1 10:20:45 CEST 2007
I have two ideas, but not the time to try them out:
One is to embed an entry in the text widget - just like the Squeezer
extension embeds a button. I think this would be the cleanest approach.
The other is to try making the getpass window transient to the main window,
and/or to give its entry widget focus before calling deiconify and tkraise.
On 8/17/07, Douglas S. Blank <dblank at brynmawr.edu> wrote:
> Thanks for looking at this and giving feedback.
> Unfortunately, this doesn't seem to work for me when running with
> Maybe it has to have to do with Tkinter running in the background thread,
> and tkraise not knowing about the IDLE window in the other thread (which
> is on top).
> If there were a global ontop function, that would do it. I'm starting to
> think that it isn't even possible in WindowsXP with IDLE with processes...
> On Thu, August 16, 2007 10:18 pm, Tal Einat said:
> > On 8/16/07, Douglas S. Blank <dblank at brynmawr.edu> wrote:
> >> Ok, I can't find anything to fix this. I've tried combinations of
> >> lift, deiconify, iconify, update, overridedirect, ... but nothing I do
> >> can get a new Tk window to appear on top of IDLE.
> >> This is very confusing for new students (and experts). I'll do whatever
> >> is necessary even it requires plugin or whatever. Can I lower IDLE?
> >> Any ideas?
> >> -Doug
> >> Here's some code to help anyone see the problem:
> >> # in IDLE on Windows XP:
> >> import Tkinter
> >> tl = Tkinter.Toplevel()
> >> tl.update()
> >> tl.raise()
> >> ...
> >> I can't get the tl window to appear on top of IDLE.
> > Well, I ran into trouble at first too when trying to do this. In the
> > end I realized that deiconify(), tkraise() and focus() need to be
> > called once the Tk object's mainloop is already running. And that they
> > must be called from the same thread that the mainloop is running in,
> > so threads must be avoided.
> > This seems to do the trick:
> > def raised():
> > top = Tk()
> > text = Text(top)
> > text.pack(expand=True)
> > top.after(50, top.deiconify)
> > top.after(50, top.tkraise)
> > top.after(50, text.focus)
> > top.mainloop()
> > Of course, using 'after' like this is an ugly hack. If the call to
> > mainloop is delayed somehow, then the window will not be raised
> > (that's why I used a 50 millisecond delay). I played around with
> > cleaner possibilities but ran into some difficulties... It's too late
> > at night, I'll give it another look tomorrow.
> > - Tal
> Douglas S. Blank
> Associate Professor, Bryn Mawr College
> Office: 610 526 6501
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the IDLE-dev