Eric Brunel
2/22/2008 9:43:00 AM
On Thu, 21 Feb 2008 16:53:14 +0100, Kevin Walzer <kw@codebykevin.com> =
wrote:
> Miki wrote:
>> Hello Kevin,
>>
>>> Tk.lift doesn't seem to work on OSX (Python 2.5.1).
>>>> If you click on the PythonLauncher application that runs in your do=
ck
>>>> when this script is executed, the window comes into focus fine.
>> You're right, but I want to window to be initially in focus (without
>> the user clicking on the python launcher icon).
>
> "Lift" (which calls the Tk command "raise") doesn't work this way, at =
=
> least not under Aqua. If your application has focus, "lift" will raise=
=
> the widget being called to the top of the stacking order. However, it =
=
> will not make the application frontmost. To do this you'd have to use =
=
> Carbon calls (look at Carbon.CarbonEvt) or use a Tk extension and call=
=
> it from Python. Of course, this is pretty much a non-issue if your =
> application is wrapped as a standard Mac application bundle via =
> py2app--most Mac users don't run Python apps from the Terminal but =
> instead double-click an application icon. In that event, "lift" should=
=
> work fine, because the application will already have focus.
There is a trick that sometimes works even for interpreted application:
import Tkinter as tk
root =3D tk.Tk()
root.withdraw()
# Code building the window...
root.lift()
root.deiconify()
root.mainloop()
This sometimes forces the window to be top-most. If this doesn't work, y=
ou =
can also try:
import Tkinter as tk
root =3D tk.Tk()
root.withdraw()
# Code building the window...
root.lift()
root.after_idle(root.deiconify)
root.mainloop()
This was a trick that had to be done on Windows a few years back to forc=
e =
the main window to be created on top of this others. It deosn't seem to =
be =
needed anymore now, but maybe the trick can be used on a Mac... Don't kn=
ow =
if this will work the same, though...
HTH
-- =
python -c "print ''.join([chr(154 - ord(c)) for c in =
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"