Edward K. Ream wrote:
Hi,
I've spent a pleasant hour or so trying to bring up a top-level Tk menu at
the same spot as it would appear if I had actually clicked the menu. That
is, I want to bring up a menu from the keyboard.
The problem is computing the x and y args to menu.post. menu.winfo_x and
menu.winfo_rootx are always 0, presumably be cause the menu isn't packed.
And I haven't been able to use menu.invoke(??) to invoke the menu *itself*.
One would think this would be a basic Tk functionality.
Any ideas? Thanks.
Edward
P.S. Here is my best so far. (It must be run from Leo for the Leo magic to
work.)
import tkFont
name = 'File' # The menu to be invoked.
# A list of all of Leo's menus.
menus = ('File','Edit','Outline','Plugins','Cmds','Window','Help')
# Compute the *approximate* x offsets of each menu.
offsets = {} ; n = 0
for z in menus:
menu = c.frame.menu.getMenu(z)
fontName = menu.cget('font')
font = tkFont.Font(font=fontName)
offsets[z] = n
# A total hack: sorta works on windows.
n += font.measure(z+' '*4)+1
top = c.frame.top # Leo magic.
topx,topy = top.winfo_rootx(),top.winfo_rooty()
menu = c.frame.menu.getMenu(name) # Leo magic.
menu.post(topx+offsets.get(name,0),topy)
EKR
Edward K. Ream email: [EMAIL PROTECTED]
Leo: http://webpages.charter.net/edreamleo/front.html
Its not obvious what you want to do. If you are going to have a menu at
all, I think you application would be better served to always have the
toplevel menu displayed, otherwise, things can get jumpy if the window
is always repacking. If you want the main menu to be contextual you
can make two different menuas andplay with toplevel.config(menu=onemenu)
and toplevel.config(menu=anothermenu), etc. If you just want to forget
the menu, you can toplevel.config(menu=), you can bring it back again
with toplevel.config(menu=somemenu), etc. This will be jumpy. If you
want a menu that pops up on top of a window, you might have to make
another window with your menu of choice. Or do you want to just bring
down a cascade menu?
--
http://mail.python.org/mailman/listinfo/python-list