Tkinter OSX and "lift"

M

Miki

Hello,

Tk.lift doesn't seem to work on OSX (Python 2.5.1).
The below starts OK, but the window is the behind all other windows.

from Tkinter import *

root = Tk()
Button(root, text="OK", command=root.quit).pack()
root.lift()
root.mainloop()

Any ideas how to tell the window to start as the topmost window?

Thanks,
 
K

Kevin Walzer

Miki said:
Hello,

Tk.lift doesn't seem to work on OSX (Python 2.5.1).
The below starts OK, but the window is the behind all other windows.

from Tkinter import *

root = Tk()
Button(root, text="OK", command=root.quit).pack()
root.lift()
root.mainloop()

Any ideas how to tell the window to start as the topmost window?

Thanks,

If you click on the PythonLauncher application that runs in your dock
when this script is executed, the window comes into focus fine.
 
M

Miki

Hello Kevin,
Tk.lift doesn't seem to work on OSX (Python 2.5.1).
You're right, but I want to window to be initially in focus (without
the user clicking on the python launcher icon).

All the best,
 
K

Kevin Walzer

Miki said:
Hello Kevin,

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.
 
M

Miki

Hello Kevin,
"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.

Thanks,
 
E

Eric Brunel

"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 = 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, you
can also try:

import Tkinter as tk
root = 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 force
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 know
if this will work the same, though...

HTH
 
M

Miki

Hello Eric,
There is a trick that sometimes works even for interpreted application:

import Tkinter as tk
root = 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, you  
can also try:

import Tkinter as tk
root = 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 force  
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 know  
if this will work the same, though...
Sadly, both of them didn't work.

Thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top