应用程序启动时显示NSPopover

Pra*_*ani 5 pyobjc objective-c nsstatusitem nspopover

我正在使用Pyobjc来创建NSStatusItem.单击它时,我显示的是NSPopOver.这工作正常.但是,我的要求是在应用程序启动时立即显示弹出框,而不会由用户执行任何操作.直接在finishLaunching中调用回调不起作用.有没有办法实现这个目标?即使可以模拟NSStatusView上的点击,它也会很好.

class TestApp(NSApplication):

    def finishLaunching(self):
        # Make statusbar item
        statusbar = NSStatusBar.systemStatusBar()
        self.statusitem = statusbar.statusItemWithLength_(NSVariableStatusItemLength)
        self.statusitem.setTarget_(self)
        self.statusitem.setAction_('statusItemClicked:')
        self.icon = NSImage.alloc().initByReferencingFile_('app-icon.png')
        self.icon.setScalesWhenResized_(True)
        self.icon.setSize_((20, 20))
        self.statusitem.setImage_(self.icon)
        self.statusitem.setHighlightMode_(1)

        # self.statusItemClicked_(None)

    def statusItemClicked_(self, notification):
        self.viewController = SimpleXibDemoController.alloc().initWithWindowNibName_("Login")

        # Show the window
        self.viewController.showWindow_(self.viewController)
        rect = self.statusitem.valueForKey_('button').frame()
        self.viewController.popover.showRelativeToRect_ofView_preferredEdge_(rect, self.statusitem.valueForKey_('button'), NSMaxYEdge)
Run Code Online (Sandbox Code Playgroud)

Aar*_*ger 1

您必须等到视图出现呈现NSPopover. viewDidAppear在您的子类中重写NSViewController并将其呈现在那里。(或者loadView如果您的最低部署目标低于 OS X Yosemite,则覆盖。)