标签: pyobjc

调用从PyObjC获取char*的选择器

我正在尝试使用PyObjC的私有框架.到目前为止我有这个:

from AppKit import *
from Foundation import *
import objc

framework="/System/Library/PrivateFrameworks/DSObjCWrappers.framework"
objc.loadBundle("DSObjCWrapper", globals(), framework)

directory = DSoDirectory.alloc()
directory.initWithHost_user_password_("server", "diradmin", "password")

eDSStartsWith = 0x2002
node = directory.findNode_matchType_(u"/LDAPv3", eDSStartsWith)
Run Code Online (Sandbox Code Playgroud)

这很好.现在,我想在我的节点(类DSoNode)上调用一个方法,使用此objective-c签名.

  • (BOOL)hasRecordsOfType:(const char*)inType

最明显的方法是不知道如何获取字符串并将其传递给char*:

node.hasRecordsOfType_("dsRecTypeStandard:ComputerLists")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

/Users/clinton/<ipython console> in <module>()

ValueError: depythonifying 'char', got 'str' of 31
Run Code Online (Sandbox Code Playgroud)

看起来可以在python看到它时更改签名.我尝试了一些变化:

objc.registerMetaDataForSelector("DSoNode", "hasRecordsOfType_", dict( arguments={ 2+0: dict(type_modifier='n', type='^C') }))
Run Code Online (Sandbox Code Playgroud)

但是 - 坦率地说我不知道​​registerMetaDataForSelector函数是如何工作的,并且还没有找到文档 - 当我在节点上调用我的选择器时,我仍然会得到相同的错误.如何告诉PyObjC将字符串转换为char*?(或者有更好的方法,因为这些字符串是头文件中的C常量#defined.)


更新:我尝试使用gen_bridge_metadata(如本博所述),并在查阅手册页后,尝试如下:

sudo mkdir -p /System/Library/PrivateFrameworks/DSObjCWrappers.framework/Resources/BridgeSupport
sudo gen_bridge_metadata --framework ~/Downloads/DSTools-112.1/build/Deployment/DSObjCWrappers.framework/ …
Run Code Online (Sandbox Code Playgroud)

pyobjc pointers objective-c char

5
推荐指数
1
解决办法
976
查看次数

有没有人在Snow Leopard中成功构建了PyObjC应用程序?

如果你这样做了,你介意分享你如何安装pyobjc吗?我试图通过安装PythonMac 2.5(通过py2app的独立包)和easy_installPyObjC来实现.我总是得到那些deprecated错误,主要是那些在dyld.h里面和内部声明的错误objc_inject.m.

我尝试从源代码编译,但仍然没有运气.

此外,当我在Snow Leopard下运行我的Leopard编译的PyObjC应用程序时,它有关于PyObjC的错误,第一次是它无法看到,Foundation或者AppKit第二次typestr是未知的.

谢谢,感谢您的回答.

macos pyobjc py2app osx-snow-leopard

5
推荐指数
1
解决办法
2286
查看次数

你如何在Mac上收听来自iTunes的通知(使用NSDistributedNotificationCenter)

寻找帮助/教程/示例代码使用python来监听来自mac上的应用程序的分布式通知.我知道py-objc lib是python和mac/cocoa类之间的桥梁,Foundation库可用于添加观察者,但是查找有关如何使用它来监视iTunes的示例或教程.

python macos notifications pyobjc

5
推荐指数
1
解决办法
2544
查看次数

Growl Python绑定点击反馈?

我正在尝试使用Growl Python绑定(来自Growl存储库的Growl.py v0.7)来编写一个小应用程序.目前缺少的一个功能是发送给Python的点击通知.

我知道在Objective-C中,当用户点击通知时,它会向正在运行的应用程序发送一个触发器.我想用Python绑定做类似的事情.当用户点击通知时,我希望Python程序在浏览器中打开一个URL(或以另一种方式处理事件).

有关如何实现它的任何想法?

更新:感谢合成器配件提供了一个很有前途的解决方案,我认为它适用于Lion.不幸的是,我开始从Mac淡出,所以我不再做很多Mac编程了.虽然,我做了一些调试,因为它仍然没有在Snow Leopard上工作,这就是为什么:

讨论低吼PyObjC不使用PyObjC 2.2b3

源代码

python macos pyobjc growl

5
推荐指数
1
解决办法
676
查看次数

没有名为objc的模块

我正在尝试使用Xcode的cocoa-python,但它总是调用错误:

Traceback (most recent call last):
  File "main.py", line 10, in <module>
    import objc
ImportError: No module named objc
Run Code Online (Sandbox Code Playgroud)

这似乎是因为我尝试安装或查找objc以及该文件使用的其他模块的所有尝试,它们根本就不在我的计算机上,我可以告诉,所以有人知道我可以在哪里下载实际文件(或者可以放他们自己的副本?)如objc.py,Foundation.py,AppKit.py和PyObjCTools.py?

python xcode pyobjc

5
推荐指数
2
解决办法
6652
查看次数

PyObjC和自定义块

官方文档说可以在python代码中使用自定义块,但是您需要创建元数据.我还没有找到它的一个例子.

我的问题是如何创建,使用和分发自定义块的元数据.

@interface SomeClass

- (void)doSomethingWithCompletion: (void (^)(SomeObject *obj, NSError *error))myBlock;

@end


def pythonMethod():
    def completion(obj, error):
        # staff
    foo = SomeClass.new()
    foo.doSomethingWithCompletion_(somehow_pass_completion)
Run Code Online (Sandbox Code Playgroud)

问题是somehow_pass_completion应该如何以及如何提供元数据myBlock.

macos cocoa pyobjc

5
推荐指数
1
解决办法
890
查看次数

MacRuby/PyObjC/RubyMotion的代码完成

Xcode最强大的功能之一就是它的Intellisense完成功能,它会在您输入Foundation/Cocoa/UIKit API的名称时显示潜在候选项列表.我对MacRuby,PyObjC或更新的RubyMotion非常感兴趣,但是如果没有代码完成,这些工具似乎比它们的价值更麻烦.

上述三种技术中的任何一种,对于任何文本编辑器(但最好是Vim或Xcode),是否有任何代码完成功能(不一定是Intellisense )?IDE解决方案的奖励点,允许在单个命令中构建和运行应用程序(如Xcode的"运行"按钮).

据我所知,Xcode 4放弃了对MacRuby/PyObjC的支持,因此Intellisense不再可用.为了完成代码,我应该在Xcode 4旁边安装Xcode 3吗?其他人如何做到这一点(当然你们使用某种形式的代码完成 - 我不相信任何人都能记住Foundation/Cocoa/UIKit中的所有类)?

xcode pyobjc macruby rubymotion

5
推荐指数
1
解决办法
1343
查看次数

你如何使用PyObjC关闭和打开Mac的无线接口?

你如何使用PyObjC关闭和打开Mac的无线接口?到目前为止,我的研究已经将我引向了Cocoa框架和PyObjC.在Mac开发人员网站,我发现一个无线接口管理应用程序演示了如何使用Cocoa框架来打开和关闭一台Mac的无线接口的例子在这里.此示例表明CoreWLAN Framework下的CWInterface是完成关闭和打开Mac无线接口的任务所必需的.然而,PyObjC似乎并不包括可可CoreWLAN框架在其包装这里.有关如何完成此任务的任何想法?我可以实现自己的PyObjc对象来调用CoreWLAN框架,如果是这样,那么如何做到这一点会有什么好资源?谢谢你的时间!一切都有帮助.

macos wireless cocoa pyobjc corewlan

5
推荐指数
1
解决办法
827
查看次数

从OSX上插入的设备获取USB设备串行

我在Lion和NSNotification中心使用Python 2.7和pyobjc来监控任何插入的USB卷.这很好用.

我也有一些想法如何获取设备的序列号,但这些只涉及解析所有USB设备.我想专门查询插入的设备(创建通知的设备),而不是检查整个USB设备列表.

如何实现这一目标?NSNotification传递给我的处理函数的对象没有那种信息,我无法通过NSNotification对象提供的信息找到有关上述操作的任何信息.

我已经尝试过DBus(就像我在Linux上做的那样),但我没有太多运气让它在OSX上可靠地运行.

python macos usb pyobjc

5
推荐指数
0
解决办法
376
查看次数

NSUserNotificationCenter.defaultUserNotificationCenter()在python中返回None

我想通过python连接到Mountain Lion通知中心.我已经安装了pyobjc,并按照这里这里的说明操作.另请参阅:使用PyObjC与Mountain Lion的通知中心合作

这是我的代码:

import Foundation, objc
import AppKit
import sys

NSUserNotification = objc.lookUpClass('NSUserNotification')
NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter')

def notify(title, subtitle, info_text, delay=0, sound=False, userInfo={}):
    """ Python method to show a desktop notification on Mountain Lion. Where:
        title: Title of notification
        subtitle: Subtitle of notification
        info_text: Informative text of notification
        delay: Delay (in seconds) before showing the notification
        sound: Play the default notification sound
        userInfo: a dictionary that can be used to handle clicks in your …
Run Code Online (Sandbox Code Playgroud)

python pyobjc nsnotificationcenter osx-mountain-lion nsusernotificationcenter

5
推荐指数
1
解决办法
1090
查看次数