【问题标题】:How to get Gdk window from xid?如何从 xid 获取 Gdk 窗口?
【发布时间】:2011-10-14 14:36:08
【问题描述】:

我迷失在版本 3.. 在 python2+gdk2 中是:

#!/usr/bin/env python2
import gtk

gtk.gdk.window_process_all_updates()
window_xid = 54525964
gdk_window = gtk.gdk.window_foreign_new(window_xid)

这几乎是直截了当的。但接下来,恐怖:

#!/usr/bin/env python3
from gi.repository import xlib
from gi.repository import Gdk
from gi.repository import GdkX11

Gdk.Window.process_all_updates()
xlib_window = "???????"
gdk_display = GdkX11.X11Display.get_default()
gdk_window = GdkX11.X11Window.foreign_new_for_display(gdk_display, xlib_window)

xlib 正在杀死我。我无法用它做任何事情。以前有人用过吗??

我已经多次阅读的文档是: Gdk3, Xlib

从它的 xid 获取窗口是在 python2 中获取屏幕截图的最快方法我想我会在 python3 中尝试另一种方式。有什么想法吗?也许来自根窗口的 peek_children ?但是,我怎么知道它是否是我想要的窗口?

【问题讨论】:

    标签: python-3.x xlib gtk3


    【解决方案1】:

    X11 中的WindowXID 相同。从一个到另一个只有一个 typedef。

    所以在 C 代码中 gdk_x11_window_foreign_new_for_display() 只接受 WindowXID,这基本上是一个整数。这也适用于使用自省的python:

    #!/usr/bin/env python3
    from gi.repository import Gdk
    from gi.repository import GdkX11
    
    Gdk.Window.process_all_updates()
    xlib_window = 0x2a00005 # from xwininfo command
    gdk_display = GdkX11.X11Display.get_default()
    gdk_window = GdkX11.X11Window.foreign_new_for_display(gdk_display, xlib_window)
    print(gdk_window.get_geometry())
    

    【讨论】:

    • 太棒了!非常感谢。当我第一次尝试这个时,我认为他们还没有实现它。虽然只是对 python3 的一个小改动,print() 指令现在需要括号。除此之外,它就像一个魅力。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多