pywinauto如何獲取gridwindow控件的屏幕位置


一:問題描述

問題一:通過查找pywinauto在線文檔,其中沒有講解到gridwindow控件的方法,我不知道這個控件是不是標准控件,還是pywinauto根本就沒適配這個控件。從網上查詢了好多資料,這類資料是相當的少啊。有一個項目要對這個控件進行操作,要統計這個控件的個數,還要進行控件的右鍵保存功能。

問題二:這類控件由於沒有相關的API方法,無法獲取這個gridwindow控件的行信息,列信息及表頭信息。

二:解決方案

問題一:通過不斷的嘗試新方法,雖然這個控件沒有API方法,但是這個控件可以通過print_control_identifers()方法打印出來這個控件的屏幕坐標信息,通過從控制台獲取打印的信息,並進行處理得到該控件的坐標信息,通過坐標值可以用相對坐標來操作此類控件,具體實現可以看下面的代碼:

#獲取控制台打印的東西
class TextArea(object):
        def __init__(self):
                self.buffer = []
        def write(self, *args, **kwargs):
                self.buffer.append(args)

#連接工具
app = application.Application()
app.connect_(path = '工具路徑')
time.sleep(2)
app = app.top_window_()
time.sleep(2)

stdout = sys.stdout
sys.stdout = TextArea()  #申請的空間
app.print_control_identifiers() #打印控件信息
text_area, sys.stdout = sys.stdout, stdout #獲取控件信息
print text_area.buffer

gridlist = []
for tup in text_area.buffer:
        i = tup[0].find('要查找的控件')
        if i > -1:

                locate = []  #用於存控件的坐標
                grid = tup[0][tup[0].find('(')+1:tup[0].find(')')].split(',')
                for gridi in grid:
                        gridj = gridi.strip()
                        gridk = int(gridj[1:])
                        locate.append(gridk)
                       
                gridlist.append(locate)

 問題二:這個問題困擾了好久,從網上查了好多資料,還是沒能解決這個問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM