Is there a way to show the menu bar inside an application window on a Mac? Is there a way to show the menu bar inside an application window on a Mac? tkinter tkinter

Is there a way to show the menu bar inside an application window on a Mac?


I am using a Mac if that makes a difference. Is there a way to fix this?

Yes, it makes a difference. Tk still doesn't support styling menus. According to TkDocs:

You'll notice on some recent Linux distributions that many applications show their menus at the top of the screen when active, rather than in the window itself. Tk does not yet support this style of menus.

More details...

And further below it says:

On Mac OS X though, there is a single menubar along the top of the screen, shared by each window. As far as your Tk program is concerned, each window still does have its own menubar; as you switch between windows, Tk will automatically take care of making sure that the correct menubar is displayed at the top of the screen. If you don't specify a menubar for a particular window, Tk will use the menubar associated with the root window; you'll have noticed by now that this is automatically created for you when your Tk application starts.

and then it gives us a tip:

Because on Mac OS X all windows have a menubar, it's important to make sure you do define one, either for each window or a fallback menubar for the root window. Otherwise, you'll end up with the "built-in" menubar, which contains menus that are only intended for use when typing commands directly into the interpreter.

Furthermore, this issue says:

The Tk menu command is hooked into the Mac OS X global menubar. If you want a menu without using the global menubar, you will have to write your own top level menu.

And here's a person asking how to possible remove the menu at the top, in case you're interested in implementing your menu on the window itself:

The name that shows up in the menu is derived by OS X from the application name in the executing application bundle. If you don't package your program up as an OS X application bundle, defaults will be used; in the case of Python OS X framework builds, Python provides a Python.app within the framework to allow the Python process to be automatically promoted to a full OS X GUI process.
Probably the simplest approach is to use py2app to create a double-clickable app with the name you want. There's an example in an answer to a similar question on Stackoverflow. And there are some old but still relevant details documented in the Tcl/TkAqua FAQ.

And in general, according to this article

On the Macintosh, whenever the toplevel is in front, this menu's cascade items will appear in the menubar across the top of the main monitor. On Windows and Unix, this menu's items will be displayed in a menubar accross the top of the window. These menus will behave according to the interface guidelines of their platforms

...

As noted, menubars may behave differently on different platforms. One example of this concerns the handling of checkbuttons and radiobuttons within the menu. While it is permitted to put these menu elements on menubars, they may not be drawn with indicators on some platforms, due to system restrictions.

Other possibly useful articles


No, it is not possible. At least, not one that works exactly like menubars on other operating systems.

You can craft a menu by using a frame with menubuttons, and packing it along the top of the window. It won't quite work the same as a native menubar, and you'll still have a mostly empty menu across the top of the screen.