Как правило, в MacOS требуется создать меню, отображаемое как часть окна верхнего уровня. Для этого выполните следующие действия.
Используя любой виджет W, получите окно верхнего уровня с помощью метода W.winfo_toplevel().
Создайте виджет Menu, используя окно верхнего уровня в качестве первого аргумента.
Элементы, добавленные в этот Menu-виджет, будут отображаться в верхней части приложения.
Вот краткий пример. Предположим, что self - это экземпляр приложения, экземпляр класса, который наследуется от Frame. Этот код создаст меню верхнего уровня под названием "Help" с одним элементом меню под названием "About", который вызывает обработчик под названием self.__aboutHandler:
top = self.winfo_toplevel()
self.menuBar = tk.Menu(top)
top['menu'] = self.menuBar
self.subMenu = tk.Menu(self.menuBar)
self.menuBar.add_cascade(label='Help', menu=self.subMenu)
self.subMenu.add_command(label='About', command=self.__aboutHandler)
В зависимости от платформы поведение может быть разным.
В системах Windows или Unix пункты меню верхнего уровня появляются в верхней части главного окна вашего приложения.
В MacOS X пункты меню верхнего уровня появляются в верхней части экрана, когда приложение активно, именно там, где пользователи Mac ожидают их увидеть.
Вы должны использовать метод .add_cascade() для всех пунктов, которые вы хотите видеть в меню верхнего уровня. Вызовы методов .add_checkbutton(), .add_command() или .add_radiobutton() будут проигнорированы.