【问题标题】:How to correctly handle CreateNotify event with python xlib?如何使用 python xlib 正确处理 CreateNotify 事件?
【发布时间】:2015-09-01 18:04:22
【问题描述】:

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

在这个例子中,我只是想处理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. 这些 BadWindows 错误来自哪里?
  3. 为什么有些窗口没有_NET_WM_ID_NET_WM_NAME 属性?
  4. 由于某些软件(如 Firefox)的多个实例具有相同的 PID,如何选择特定窗口(例如仅更改一个 Firefox 实例的属性)?

我使用 Linux Mint Cinnamon(Muffin 窗口管理器)。

有输出:

BadWindow error
19:58:16 - new window: 10510 firefox

NAME or PID property not found.

19:58:16 - new window: 8417 Firefox

19:58:16 - new window: 8417 Firefox

BadWindow error
NAME or PID property not found.

BadWindow error
BadWindow error
19:58:20 - new window: 10519 firefox

19:58:20 - new window: 8417 Firefox

NAME or PID property not found.

19:58:20 - new window: 8417 Firefox

BadWindow error
NAME or PID property not found.

【问题讨论】:

    标签: python events xlib


    【解决方案1】:

    为什么会发生所有这些事件?我预计会得到 2 个事件,我最后得到了 6 个。

    当您的鼠标悬停在按钮上时,会出现一个弹出窗口。此弹出窗口算作“窗口”。

    这些 BadWindows 错误从何而来?

    弹出窗口。

    为什么有些窗口没有 _NET_WM_ID 和 _NET_WM_NAME 属性?

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

    没有边框的窗口没有。

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

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2021-07-31
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多