如何用pythonxlib正确处理CreateNotify事件?

2024-10-04 01:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在用户刚打开窗口时更改它的属性。在

在本例中,我只是尝试处理CreateNotify事件:

#!/usr/bin/python
import Xlib
from Xlib import X, display, error
import time

disp = Xlib.display.Display()
root = disp.screen().root
root.change_attributes(event_mask=Xlib.X.SubstructureNotifyMask)

def getProp(win, prop):
    p = win.get_full_property(disp.intern_atom('_NET_WM_' + prop), 0)
    return [None] if (p is None) else p.value

while True:
    event = disp.next_event()
    if event.type == X.CreateNotify:
        newWin = event.window
        try:
            newWinName = getProp(newWin, 'NAME')
            newWinPID = getProp(newWin, 'PID')[0]

            if newWinName and newWinPID:
                print time.strftime('%H:%M:%S'), "- new window:", newWinPID, newWinName
            else:
                print 'NAME or PID property not found.'
            print

        except Xlib.error.BadWindow:
            print "BadWindow error"

此脚本正确捕获“新窗口”事件。 但是这个脚本并没有完全输出我的想法,所以我有一些问题。在这个例子中,我打开了两次Firefox窗口。在

  1. 为什么会发生这些事?我期望得到2个项目,最后我得到了6个项目。在
  2. 这些错误从哪里来?在
  3. 为什么有些窗口没有_NET_WM_ID_NET_WM_NAME属性?在
  4. 由于某些软件(如Firefox)的多个实例具有相同的PID,如何选择特定的窗口(例如只为一个Firefox实例更改属性)?在

我使用Linux薄荷肉桂(松饼窗口管理器)。在

输出如下:

^{pr2}$

Tags: nameimporteventnetif属性errorroot
1条回答
网友
1楼 · 发布于 2024-10-04 01:22:42

Why all these events ? I expected to get 2 events, I got at last 6.

当鼠标悬停在一个按钮上时,会出现一个弹出窗口。此弹出窗口计为“窗口”。在

Where come from these BadWindows errors ?

弹出窗口。在

Why some windows don't have _NET_WM_ID and _NET_WM_NAME properties ?

只有带有边框的窗口才具有_NET_WM_ID和_NET_WM_NAME属性。在

没有边框的窗口没有它们。在

弹出窗口是没有边框的窗口。在

相关问题 更多 >