我有一个用 PyObjC 编写的 statusItem 应用程序。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)
launchPreferences: 方法是:
def launchPreferences_(self, notification):
preferences = Preferences.alloc().initWithWindowNibName_('Preferences')
preferences.showWindow_(self)
Preferences 是一个 NSWindowController 类:
class Preferences(NSWindowController):
当我在 XCode (Build & Go) 中运行应用程序时,它工作正常。但是,当我从 XCode 外部运行构建的 .app 文件时,statusItem 和 menuItem 会按预期显示,但是当我单击 Preferences menuItem 时,窗口不会出现。我已经通过检查控制台输出验证了 launchPreferences 代码正在运行。
此外,如果我再次双击 .app 文件,则会出现该窗口,但如果我通过单击(例如)Finder 窗口来更改活动窗口,则首选项窗口会消失。在我看来,这与活动窗口有关。
更新 1 我已经尝试了这 两个答案,但都不起作用。如果我添加到 launchPreferences 方法:
preferences.makeKeyAndOrderFront_()
或者
preferences.setLevel_(NSNormalWindowLevel)
然后我得到一个错误:
“首选项”对象没有属性