_PyGObject_API接口在某个时刻发生了更改。我需要删除register_sinkfunc函数。以下工作:from gi.repository import Gio, GLib
import gi
import ctypes
class _PyGObject_Functions(ctypes.Structure):
_fields_ = [
('register_class',
ctypes.PYFUNCTYPE(ctypes.c_void_p, ctypes.c_char_p,
ctypes.c_int, ctypes.py_object,
ctypes.py_object)),
('register_wrapper',
ctypes.PYFUNCTYPE(ctypes.c_void_p, ctypes.py_object)),
('lookup_class',
ctypes.PYFUNCTYPE(ctypes.py_object, ctypes.c_int)),
('newgobj',
ctypes.PYFUNCTYPE(ctypes.py_object, ctypes.c_void_p)),
]
class PyGObjectCPAI(object):
def __init__(self):
PyCObject_AsVoidPtr = ctypes.pythonapi.PyCObject_AsVoidPtr
PyCObject_AsVoidPtr.restype = ctypes.c_void_p
PyCObject_AsVoidPtr.argtypes = [ctypes.py_object]
addr = PyCObject_AsVoidPtr(ctypes.py_object(
gi._gobject._PyGObject_API))
self._api = _PyGObject_Functions.from_address(addr)
def pygobject_new(self, addr):
return self._api.newgobj(addr)
capi = PyGObjectCPAI()
从指针获取对象:
^{pr2}$
要从(g)对象获取指针:pointer = hash(obj)
我得补充一下,在我的情况下,这并没有帮助我解决实际问题。我试图与dconf接口,但是dconf返回GVariant类型的值,它不是从GObject继承的。遗憾的是,PyGI/GObject并没有公开将C(*GVariant)转换为Python所必需的函数油嘴滑舌的变体. 我想这是你不得不放弃最初的方法去尝试不同的方法的时候。在