Video 在Windows上获取gtk.gdk.window.handle

Video 在Windows上获取gtk.gdk.window.handle,video,gtk,pygtk,vlc,Video,Gtk,Pygtk,Vlc,我正在用Python和PyGTK开发一个简单的视频播放器,使用VLC作为播放器后端。我想在gtk.DrawingArea中显示视频图像,因此在Linux中,我使用builder.get_object('drawingarea1').window.xid获取DrawingArea小部件的xid。在Windows中,根据文档,我必须使用builder.get_object('drawingara1').window.handle,但当我开始播放视频文件时,它会在整个窗口中播放,而不仅仅是在gtk.d

我正在用Python和PyGTK开发一个简单的视频播放器,使用VLC作为播放器后端。我想在gtk.DrawingArea中显示视频图像,因此在Linux中,我使用builder.get_object('drawingarea1').window.xid获取DrawingArea小部件的xid。在Windows中,根据文档,我必须使用builder.get_object('drawingara1').window.handle,但当我开始播放视频文件时,它会在整个窗口中播放,而不仅仅是在gtk.drawingara中。我开始挖掘以找出发生了什么,我发现从builder.get\u object('mainWindow').window.handle中检索到的数字与builder.get\u object('drawingara1').window.handle相同。这是获取小部件处理程序的正确方法,还是我做错了什么?

没有示例,我不确定您到底做了什么,但是我做了一些搜索,在这里找到了这个问题和可能的答案。并附上一个例子。他提供的链接已经不存在了,但我找到了一个更新的链接。基本上,你必须打电话

drawingarea.window.ensure_native()
使

drawingarea.window.handle
属性返回drawingarea的正确本机句柄

Linux上的属性获取

drawingarea.window.xid
自动调用

drawingarea.window.ensure_native()
但是

这不是为你做的


我希望这会有所帮助。

只是一种预感,但请尝试将绘图区域放置在GtkEventBox上。谢谢,这对我很有用。此外,我还有另一个问题:如果我隐藏播放器的窗口并再次显示(这是一个“隐藏到systray”功能),视频将不会再次显示,直到我销毁gtk.Drawingarea并重新创建它。这里有什么问题?老实说,我不知道。您是否尝试调用drawingarea.window.Sure\u native()了?这就是我所能想到的。也可能是句柄在隐藏时被破坏,因此您可能需要在调用sure_native()后查看句柄是否相同,并确保句柄指针指向正确的句柄。只是一个有根据的猜测。让我知道我说的是否有效。隐藏视频窗口前后句柄id似乎保持不变。再次调用确保_native()无效。我在VLC论坛上问过,他们说这是GTK的问题。。。所以我想我必须对此感到高兴。谢谢,知道这一点很有用。是的,我想,除非你愿意修复GTK的windows端口中的错误,否则我同意必须对你所拥有的感到满意。
drawingarea.window.handle