gpt4 book ai didi

python - 从 python 访问 API objc 常量和枚举

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:46 24 4
gpt4 key购买 nike

我正在使用 pyobjc 将一些所需的 OSX 功能添加到一些随机的 python 软件中。我需要从 python-land 访问 API 定义的 objc-land 常量。

此类常量的一个示例位于 NSRunningApplication 的最下方。页面,特别是 NSApplicationActivationPolicy 的三个可能值。

就上下文而言,当前的任务是列出当前正在运行的面向用户的应用程序。为此,以下代码可以正常工作:

from Foundation import *
from Cocoa import *
import objc

for runningApp in sorted(
NSWorkspace.sharedWorkspace().runningApplications(),
key=lambda x: x.localizedName()
):
if runningApp.activationPolicy() == 0:
# Do stuff

但我不想检查零(以使其更具可读性),也不想在我自己的代码中将虚拟 NSApplicationActivationPolicyRegular 值硬编码为零(当它在原始库中很容易获得时)。

如何通过 pyobjc 从 python 访问此类 objc 常量?

最佳答案

Apple 提供的 PyObjC 早于 10.6 中对 Cocoa 所做的一些添加。 NSRunningApplication 是这些添加内容之一,因此 PyObjC 不知道它。您需要将一些元数据添加到 AppKit BridgeSupport 文件中:/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/AppKit/PyObjC.bridgesupport

这三行将覆盖您尝试使用的枚举

<enum name='NSApplicationActivationPolicyRegular' value='0' />
<enum name='NSApplicationActivationPolicyAccessory' value='1' />
<enum name='NSApplicationActivationPolicyProhibited' value='2' />

请注意,像这样更改 PyObjC 可能意味着您必须静态链接并将更新的版本包含到您的应用程序中以进行分发,因为其他人计算机上的版本不会有此数据。最好编译最新版本的 PyObjC(其中将包含这些更改以及其他更改)并使用它。

关于python - 从 python 访问 API objc 常量和枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106332/

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