2012-10-08 98 views
4

我需要找到窗口的位置和大小,但我不知道如何。例如,如果我嘗試:在python中獲取窗口的位置和大小用Xlib

id.get_geometry() # "id" is Xlib.display.Window 

我得到的是這樣的:

data = {'height': 2540, 
'width': 1440, 
'depth': 24, 
'y': 0, 'x': 0, 
'border_width': 0 
'root': <Xlib.display.Window 0x0000026a> 
'sequence_number': 63} 

我需要找到窗口的位置和大小,所以我的問題是:「Y」,「x」和「BORDER_WIDTH 「總是0;更糟糕的是,「高度」和「寬度」不帶窗框返回。在這種情況下,在我的X屏幕上(它的尺寸是4400x2560),我預期x = 1280,y = 0,寬度= 1440,高度= 2560。

換句話說,我正在尋找蟒蛇相當於爲:

#!/bin/bash 
id=$1 
wmiface framePosition $id 
wmiface frameSize $id 

如果你覺得Xlib的是不是我想要的,隨意報價在蟒蛇非Xlib的解決方案,如果它可以採取窗口ID作爲參數(如上面的bash腳本)。在Python代碼中使用bash腳本輸出的顯而易見的解決方法並不合適。

+0

感謝Andrey Sidorov的回答,我解決了我的問題。這是一個非常簡單的腳本,它演示瞭解決方案:[print_frame_geometry_of_all_windows.py](http://science.su/stuff/so/print_frame_geometry_of_all_windows.py)。 –

回答

1

您可能正在使用重新配置窗口管理器,並且因爲此窗口具有零x和y。檢查父窗口(這是窗口管理框架)

+0

我使用KWin作爲我的窗口管理器。但是,我如何獲得父窗口? –

+0

http://tronche.com/gui/x/xlib/window-information/XQueryTree.html –

+0

在我問及如何找到父窗口之前,我用Google搜索了一下,看到了這個頁面。不幸的是,它是關於C xlib(而不是python xlib),所以它沒有幫助。任何想法如何用Python找到父窗口? –

0

的座標利斯發表了以下的解決方案as a comment

from ewmh import EWMH 
ewmh = EWMH() 

def frame(client): 
    frame = client 
    while frame.query_tree().parent != ewmh.root: 
     frame = frame.query_tree().parent 
    return frame 

for client in ewmh.getClientList(): 
    print frame(client).get_geometry() 

我在這裏複製它,因爲answers should contain the actual answer,並防止link rot