4

PyGObject/PyGI と GStreamer を使用して、GUI でビデオを表示します。ビデオは Gtk.DrawingArea に表示されるため、react-signal-handler でウィンドウ ハンドルを取得する必要があります。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