Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MacOS上获取PyGI中的窗口句柄_Macos_Ctypes_Gtk3_Pygobject_Python Gstreamer - Fatal编程技术网

在MacOS上获取PyGI中的窗口句柄

在MacOS上获取PyGI中的窗口句柄,macos,ctypes,gtk3,pygobject,python-gstreamer,Macos,Ctypes,Gtk3,Pygobject,Python Gstreamer,我使用PyGObject/PyGI和GStreamer在GUI中显示视频。视频显示在Gtk.DrawingArea中,因此我需要在realize signal handler中获取它的窗口句柄。在Linux上,我可以简单地使用绘图区域。get\u属性(“窗口”)。get\u xid()在Windows上,我必须访问C-API(如所述): 现在我想在MacOS上也一样。因为它不是使用X11,而是使用Quartz,所以我再次尝试使用C-API。但这次调用的是gdk\u quartz\u window

我使用PyGObject/PyGI和GStreamer在GUI中显示视频。视频显示在Gtk.DrawingArea中,因此我需要在realize signal handler中获取它的窗口句柄。在Linux上,我可以简单地使用
绘图区域。get\u属性(“窗口”)。get\u xid()
在Windows上,我必须访问C-API(如所述):

现在我想在MacOS上也一样。因为它不是使用X11,而是使用Quartz,所以我再次尝试使用C-API。但这次调用的是
gdk\u quartz\u window\u get\u nswindow
,而不是
gdk\u win32\u window\u get\u handle
(请参阅):


但是这只会导致一个
分段错误:11

关于如何在MacOS上获得句柄有什么想法吗?

我对此做了一些研究,我发现您的代码与其他使用
gdk_quartz_window_get_nswindow的代码之间唯一的区别是,在其他示例中(在C中)将一个窗口句柄传递给这个函数。比如这里:但是窗口句柄是我想要检索的。因此我无法将其传递给函数;)链接的源文件使用
GdkWindow.Handle
。在我的示例中,
drawingarea\u window
的类型为
GdkWindow
。但是,此对象不包含
句柄
/
句柄
属性/属性。@Biggie您得到这个问题的答案了吗???不幸的是,没有:(
drawingarea_window = drawingarea.get_property('window')
ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.c_void_p
ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object]
drawingarea_gpointer = ctypes.pythonapi.PyCapsule_GetPointer(drawingarea_window.__gpointer__, None)
gdkdll = ctypes.CDLL ('libgdk-3-0.dll')
self._drawingarea_handle = gdkdll.gdk_win32_window_get_handle(drawingarea_gpointer)
// ... same lines as in Windows-example
gdkdll = ctypes.CDLL ('libgdk-3.0.dylib')
self._drawingarea_handle = gdkdll.gdk_quartz_window_get_nswindow(drawingarea_gpointer)