gpt4 book ai didi

python - 从 statusItem 启动的 NSWindow menuItem 不显示为事件窗口

转载 作者:行者123 更新时间:2023-12-03 17:29:57 25 4
gpt4 key购买 nike

我有一个用 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 按预期显示,但当我单击“首选项”menuItem 时,窗口不会出现。我已经通过检查控制台输出验证了 launchPreferences 代码正在运行。

此外,如果我再次双击 .app 文件,该窗口就会出现,但如果我通过单击(例如,在 Finder 窗口上单击)来更改事件窗口,则首选项窗口就会消失。在我看来,这与事件窗口有关。

更新 1我已经尝试过these two答案但都不起作用。如果我添加到 launchPreferences 方法中:

preferences.makeKeyAndOrderFront_()

preferences.setLevel_(NSNormalWindowLevel)

然后我收到一个错误:

'Preferences' object has no attribute

最佳答案

您需要向应用程序发送一条 activateIgnoringOtherApps: 消息,然后发送窗口 makeKeyAndOrderFront:。

在 Objective-C 中,这将是:

[NSApp activateIgnoringOtherApps:YES];
[[self window] makeKeyAndOrderFront:self];

关于python - 从 statusItem 启动的 NSWindow menuItem 不显示为事件窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/152344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com