[Idle-dev] IDLE getpass?

Tal Einat 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.

- Tal

On 8/17/07, Douglas S. Blank <dblank at brynmawr.edu> wrote:
>
> Tal,
>
> Thanks for looking at this and giving feedback.
>
> Unfortunately, this doesn't seem to work for me when running with
> subprocesses.
>
> 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...
>
> -Doug
>
> 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
> lower,
> >> 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
> http://cs.brynmawr.edu/~dblank/
> Office: 610 526 6501
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/idle-dev/attachments/20070901/94a5055f/attachment.htm 


More information about the IDLE-dev mailing list