У меня есть приложение statusItem, написанное в PyObjC. StatusItem имеет MENUITEM, который предполагается запустить новое окно при щелчке:NSWindow запущен из 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)
The launchPreferences: метод:
def launchPreferences_(self, notification):
preferences = Preferences.alloc().initWithWindowNibName_('Preferences')
preferences.showWindow_(self)
Preferences является классом NSWindowController:
class Preferences(NSWindowController):
Когда я запускаю приложение в XCode (Build & Go), это отлично работает. Однако, когда я запускаю встроенный файл .app извне из XCode, statusItem и menuItem отображаются так, как ожидалось, но когда я нажимаю на пункт меню Preferences, окно не появляется. Я проверил, что код launchPreferences запускается путем проверки вывода консоли.
Кроме того, если я снова дважды щелкнуть файл .app, появится окно, но если я закрою активное окно, щелкнув, например, в окне Finder, окно настроек исчезнет. Мне кажется, что это связано с активным окном.
Update 1 Я попытался thesetwo ответов, но ни работа. Если добавить в метод launchPreferences:
preferences.makeKeyAndOrderFront_()
или
preferences.setLevel_(NSNormalWindowLevel)
тогда я просто получаю сообщение об ошибке:
'Preferences' object has no attribute
makeKeyAndOrderFront не имеет эффекта, а результаты setLevel в объекте «Предпочтения» не имеют атрибута «setLevel_». – DavidM
Собственно, makeKeyAndOrderFront также та же ошибка: Объект 'Preferences' не имеет атрибута 'makeKeyAndOrderFront_' – DavidM