У меня есть приложение statusItem, написанное на PyObjC. StatusItem имеет menuItem, который должен запускать новое окно при нажатии:
# Create statusItem
statusItem = NSStatusBar.systemStatusBar().statusItemWithLength_(NSVariableStatusItemLength)
statusItem.setHighlightMode_(TRUE)
statusItem.setEnabled_(TRUE)
statusItem.retain()
# Create menuItem
menu = NSMenu.alloc().init()
menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Preferences', 'launchPreferences:', '')
menu.addItem_(menuitem)
statusItem.setMenu_(menu)
Параметры запуска: метод:
def launchPreferences_(self, notification):
preferences = Preferences.alloc().initWithWindowNibName_('Preferences')
preferences.showWindow_(self)
Предпочтения - это класс NSWindowController:
class Preferences(NSWindowController):
Когда я запускаю приложение в XCode (Build & Go), это прекрасно работает. Однако, когда я запускаю встроенный файл .app извне из XCode, statusItem и menuItem появляются, как и ожидалось, но когда я нажимаю на пункт меню Preferences, окно не появляется. Я убедился, что код launchPreferences запущен, проверив вывод консоли.
Далее, если я снова дважды щелкну файл .app, появится окно, но если я удалю активное окно, щелкнув, например, в окне Finder, окно настроек исчезнет. Мне кажется, это как-то связано с активным окном.
Обновление 1
Я пробовал эти два ответа, но ни один из них не работает. Если я добавлю в метод launchPreferences:
preferences.makeKeyAndOrderFront_()
или
preferences.setLevel_(NSNormalWindowLevel)
тогда я просто получаю сообщение об ошибке:
Объект «Настройки» не имеет атрибута