在 PyObjC 中为 openFile 实现 NSApplication 委托协议

Posted

技术标签:

【中文标题】在 PyObjC 中为 openFile 实现 NSApplication 委托协议【英文标题】:Implementing NSApplication delegate protocol for openFile in PyObjC 【发布时间】:2016-02-12 05:45:07 【问题描述】:

我想在 Python (pyobjc) 中执行此操作

-(BOOL) application: (NSApplication*)sharedApplication openFile:(NSString*) fileName 
...

我的委托是这样的 Python 类:

class ApplicationDelegate(NSObject):
    ...
    def applicationDidFinishLaunching_(self, notification):
    ...
    def applicationWillTerminate_(self, sender):
    ...

如何?

【问题讨论】:

实现方法即可。你有什么问题? 我无法将 Objective-C 语法正确翻译成 Python。我不熟悉 Objective-C 约定。任何帮助,将不胜感激。特别是 PyObjC 中方法签名的正确语法。 【参考方案1】:

Objective-C 方法名称是“application:openFile:”,包括冒号。 PyObjC translates ObjC names by replacing colons with underscores。所以你需要的方法名是“application_openFile_”:

class ApplicationDelegate (NSObject):
    def application_openFile_(self, application, fileName):
        pass

因为NSApplicationDelegate 是一个“非正式协议”并且方法是可选的there's no need in Python to declare your conformance。如果有,协议将在 Python 端由 mixin 样式的类表示,并且您的类定义如下所示:

class AppDelegate (NSObject, NSApplicationDelegate):
    pass

【讨论】:

添加 'self' 作为 def 子句的第一个参数。效果很好!非常感谢:D 哦,是的,对此感到抱歉:这是由大脑编译的,我已经有一段时间没有做过 PyObjC 了。很高兴我能帮上忙。

以上是关于在 PyObjC 中为 openFile 实现 NSApplication 委托协议的主要内容,如果未能解决你的问题,请参考以下文章

PyOBJC MLMediaLibrary

Cocoa/PyObjC 分布式对象缺少一些东西

使用 pip、easy_install、manual 安装 PyObjc 时遇到问题

python 在OS X上强制使用pyobjc自动发现时区

使用OpenFiler实现共享存储

python pyobjc的例子。