4

我使用 PyGObject/PyGI 和 GStreamer 在我的 GUI 中显示视频。该视频显示在 Gtk.DrawingArea 中,因此我需要在实现信号处理程序中获取它的窗口句柄。在 Linux 上我可以简单地使用drawing_area.get_property('window').get_xid(),而在 Windows 上我必须访问 C-API(如此所述):

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)

现在我想要在 MacOS 上也一样。由于它不是使用 X11,而是 Quartz,所以我再次尝试使用 C-API。但是这次调用gdk_quartz_window_get_nswindow而不是gdk_win32_window_get_handle(参见gdkwindow-quartz.c):

// ... same lines as in Windows-example
gdkdll = ctypes.CDLL ('libgdk-3.0.dylib')
self._drawingarea_handle = gdkdll.gdk_quartz_window_get_nswindow(drawingarea_gpointer)

但这只会导致Segmentation fault: 11.
关于如何在 MacOS 上处理的任何想法?

4

0 回答 0