gpt4 book ai didi

python - 从整数 id 获取 pyobjc 对象

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:07 25 4
gpt4 key购买 nike

有没有办法获取 Objective-C 对象的 PyObjC 代理对象,只给定它的 id 作为整数?不加扩展模块能行吗?

在我的例子中,我试图从 wx.Frame.GetHandle 的返回值中获取一个 Cocoa 代理对象(将 wxMac 与 Cocoa 结合使用)。

最佳答案

我找到的一个解决方案依赖于 ctypesid 创建一个 objc_object 对象:

import ctypes, objc
_objc = ctypes.PyDLL(objc._objc.__file__)

# PyObject *PyObjCObject_New(id objc_object, int flags, int retain)
_objc.PyObjCObject_New.restype = ctypes.py_object
_objc.PyObjCObject_New.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int]

def objc_object(id):
return _objc.PyObjCObject_New(id, 0, 1)

它用于打印 wx.Frame 的示例:

import wx

class Frame(wx.Frame):
def __init__(self, title):
wx.Frame.__init__(self, None, title=title, pos=(150,150), size=(350,200))

m_print = wx.Button(self, label="Print")
m_print.Bind(wx.EVT_BUTTON, self.OnPrint)

def OnPrint(self, event):
topobj = objc_object(top.GetHandle())
topobj.print_(None)

app = wx.App()
top = Frame(title="ObjC Test")
top.Show()

app.MainLoop()

它有点讨厌,因为它使用了 ctypes。如果有一个我忽略的 pyobjc API 函数或其他更简洁的方法,我肯定会感兴趣。

关于python - 从整数 id 获取 pyobjc 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12328143/

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