如何通过Python计算Linux上具有特定标题的Window数量?

时间:2012-10-17 02:51:18

标签: python linux x11

这是我的解决方案,但我认为这不是一个好的解决方案。任何人都可以建议我新的解决方案,我想通过使用python的核心库,而不是wnck或pygtk来获取标题属性以进行比较......

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

1 个答案:

答案 0 :(得分: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(&gt; = 3.0),您必须使用PyGObject(GObject Introspection),但您明白了。