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) でアプリケーションを実行すると、これは正常に動作します。ただし、ビルドした .app ファイルを XCode の外部で実行すると、statusItem と menuItem は期待どおりに表示されますが、Preferences menuItem をクリックするとウィンドウが表示されません。コンソール出力を確認して、launchPreferences コードが実行されていることを確認しました。
さらに、もう一度 .app ファイルをダブルクリックすると、ウィンドウが表示されますが、たとえば Finder ウィンドウをクリックしてアクティブなウィンドウを変更すると、設定ウィンドウが消えます。これは、アクティブなウィンドウと関係があるように思えます。
更新 1これら 2 つの回答 を試しましたが、どちらも機能しません。launchPreferences メソッドに追加すると、次のようになります。
preferences.makeKeyAndOrderFront_()
また
preferences.setLevel_(NSNormalWindowLevel)
次に、エラーが発生します。
「設定」オブジェクトには属性がありません