3

这是我的解决方案,但我认为这不是一个好的解决方案。任何人都可以建议我新的解决方案,我想枚举窗口,并通过仅使用 python 的核心库而不是 wnck 或 pygtk 来比较 Title 属性...

def linux_CountWindowsByTitle(title):
    import commands
    XWinInfoOutput = commands.getoutput("xwininfo -all -root")
    resArray = XWinInfoOutput.split("\n")
    resRange = len(resArray) - 1
    res = 0
    #Parse each line of output
    for i in range(0, resRange):
        index = resArray[i].find("\"")   #Get index of Double quote
        if (index < 0):
            continue    #This line does not have title we need

        tmp = resArray[i].split("\": (")[0] #Remove tail
        windowName = tmp.split("\"",1)[1]   #Remove head
        if (UTILITY.Compare(title, windowName)):
            #LIBRARY.Report(windowName)
            res += 1

    return res
4

1 回答 1

2

您可以使用该模块wnck

import wnck

screen = wnck.screen_get_default()
window_list = wnck.Screen.get_windows(screen)

window_names = [ w.get_name() for w in window_list ]

为了计算相似的窗口,您可以创建一个字典:

count = window_names.count
wcounts = { item: item.count(item) for item in set(window_names) }

字典将窗口标题作为键,值将是相同名称的重复次数。

略有不同,但您可能会觉得有趣的是:

wdict = { w.get_name(): w for w in window_list }
wdict.has_key(title)

如果您以后需要该窗口进行其他处理,您仍然可以在wdict. 例如,您可以检查属性、最大化属性、最小化属性以及窗口管理器会执行的所有典型操作。

注意:对于wnck(>=3.0) 的较新版本,您必须使用 PyGObject (GObject Introspection),但您明白了。

于 2012-10-17T03:32:23.857 回答