gpt4 book ai didi

python - 如何在 Gtk3 中获取 DrawingArea 窗口句柄?

转载 作者:太空狗 更新时间:2023-10-30 02:45:49 25 4
gpt4 key购买 nike

我在 CEF Python 3 ( link ) 上得到这段代码

    ...

self.container = gtk.DrawingArea()
self.container.set_property('can-focus', True)
self.container.connect('size-allocate', self.OnSize)
self.container.show()

...

windowID = self.container.get_window().handle
windowInfo = cefpython.WindowInfo()
windowInfo.SetAsChild(windowID)
self.browser = cefpython.CreateBrowserSync(windowInfo,
browserSettings={},
navigateUrl=GetApplicationPath('example.html'))

...

此代码 [self.container.get_window().handle] 不适用于 PyGI 和 GTK3。

我正在尝试将代码从 GTK2 移植到 GTK3,我该怎么做?

编辑:


经过一些搜索,我发现了一个让 get_window 工作的技巧:我在 self.container.get_window( )。但是我还不能得到窗口句柄。

我需要将 CEF3 窗口放在 DrawingArea 或任何元素中。我如何使用 PyGI 做到这一点?

编辑:


我的环境是:

Windows 7

Python 2.7 和 Python 3.2

最佳答案

可悲的是,python gobject 自省(introspection)似乎没有进展来解决这个问题并使 gdk_win32_window_get_handle 可用(很久以前在 gnome bugtracker 中报告了一个错误)- Python 也非常需要它GStreamer 和 Windows ...

所以我听从了totaam的建议,使用ctypes访问了gdk_win32_window_get_handle。因为我没有这方面的经验,所以花了我很长时间 - 好吧,这在某种程度上是一个非常丑陋的 hack - 但在需要时好吧......

代码如下:

        Gdk.threads_enter()            
#get the gdk window and the corresponding c gpointer
drawingareawnd = drawingarea.get_property("window")
#make sure to call ensure_native before e.g. on realize
if not drawingareawnd.has_native():
print("Your window is gonna freeze as soon as you move or resize it...")
ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.c_void_p
ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object]
drawingarea_gpointer = ctypes.pythonapi.PyCapsule_GetPointer(drawingareawnd.__gpointer__, None)
#get the win32 handle
gdkdll = ctypes.CDLL ("libgdk-3-0.dll")
hnd = gdkdll.gdk_win32_window_get_handle(drawingarea_gpointer)
#do what you want with it ... I pass it to a gstreamer videosink
Gdk.threads_leave()

关于python - 如何在 Gtk3 中获取 DrawingArea 窗口句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23021327/

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