【问题标题】:How to get an Xlib.display.Window instance by id?如何通过 id 获取 Xlib.display.Window 实例?
【发布时间】:2014-02-25 12:53:14
【问题描述】:

我找到了以下代码 (http://pastebin.com/rNkUj5V8),但我宁愿使用直接查找:

import Xlib
import Xlib.display

def get_window_by_id(winid):
    mydisplay = Xlib.display.Display()
    root = mydisplay.screen().root # should loop over all screens
    inspection_list = [root]

    while len(inspection_list) != 0:
        awin = inspection_list.pop(0)
        if awin.id == winid:
            return awin
        children = awin.query_tree().children
        if children != None:
            inspection_list += children

    return None

# use xwininfo -tree to click on something (panel was good for me)
# until you find a window with a name, then put that id in here
print get_window_by_id(0x1400003)
print get_window_by_id(0x1400003).get_wm_name()

我曾尝试直接实例化一个 Window 对象,但随后对 get_attributes 的调用失败:

w = Xlib.xobject.drawable.Window(Xlib.display.Display(), 67142278)
w.get_attributes()

/usr/lib/python2.7/dist-packages/Xlib/display.pyc in __getattr__(self, attr)
    211             return types.MethodType(function, self)
    212         except KeyError:
--> 213             raise AttributeError(attr)
    214 
    215     ###

AttributeError: send_request

【问题讨论】:

    标签: python xlib


    【解决方案1】:

    使用dpy.create_resource_object('window', 0x1400003),其中dpyDisplay 对象,可在该显示器上为具有给定XID 的现有窗口获取Window 对象。

    示例用法:

    >>> import Xlib
    >>> import Xlib.display
    >>> dpy = Xlib.display.Display()
    >>> win = dpy.create_resource_object('window', 0x277075e)
    >>> win.get_wm_class()
    ('gnome-terminal', 'Gnome-terminal')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 2019-05-18
      • 2010-10-12
      • 2019-07-08
      • 2017-11-13
      • 2012-06-20
      • 1970-01-01
      相关资源
      最近更新 更多