Detail

A MenuShell is a container of MenuItem objects arranged in a list
which can be navigated, selected, and activated by the user to perform
application functions. A MenuItem can have a submenu associated with it,
allowing for nested hierarchical menus.

If takeFocus is True (the default) the menu shell will take the
keyboard focus so that it will receive all keyboard events which is needed
to enable keyboard navigation in menus.

Setting takeFocus to False is useful only for special applications
like virtual keyboard implementations which should not take keyboard focus.

The takeFocus state of a menu or menu bar is automatically propagated
to submenus whenever a submenu is popped up, so you don't have to worry
about recursively setting it for your entire menu hierarchy. Only when
programmatically picking a submenu and popping it up manually, the
takeFocus property of the submenu needs to be set explicitely.

Note that setting it to False has side-effects:

If the focus is in some other app, it keeps the focus and keynav in the
menu doesn't work. Consequently, keynav on the menu will only work if the
focus is on some toplevel owned by the onscreen keyboard.

To avoid confusing the user, menus with takeFocus set to False should
not display mnemonics or accelerators, since it cannot be guaranteed that
they will work.