【问题标题】:Pywinauto: how the `findbestmatch` module works?Pywinauto:`findbestmatch` 模块是如何工作的?
【发布时间】:2017-02-27 22:16:10
【问题描述】:

我试图了解findbestmatch 模块的工作原理。这是一个例子。

from pywinauto.application import Application
from pywinauto.findbestmatch import find_best_match
ditto=Application().connect(path='Ditto.exe').window(title="Ditto",class_name="QPasteClass")
ditto.ditto.ListView.findbestmatch.find_best_match(hello)

我正在尝试使用其中一种方法来获取ListView 中列出的HELLO 2 项目。 (这些项目没有自己的控件标识符)

print(ditto.print_control_identifiers()) 给出:

Control Identifiers:
QPasteClass - 'Ditto'    (L1114, T321, R1366, B740)
['QPasteClass', 'DittoQPasteClass', 'Ditto']
child_window(title="Ditto", class_name="QPasteClass")
   |
   | ListView - ''    (L1116, T343, R1357, B722)
   | ['ListView<noautodelete><ingroup><pasted>|HELLO 1\n','ListView<noautodelete><ingroup><pasted>|Hello 2\n', 'ListView<noautodelete><ingroup><pasted>|Hello 3\n', ]
   | child_window(class_name="SysListView32")
   |    |
   |    | Header - ''    (L1116, T343, R1357, B343)
   |    | ['Header', 'TagsHeader']
   |    | child_window(class_name="SysHeader32")
   |
   | Header - ''    (L1116, T343, R1357, B343)
   | ['Header', 'TagsHeader']
   | child_window(class_name="SysHeader32")

我尝试了ditto.ListView.findbestmatch.find_best_match("HELLO 2") 和许多其他方法都不起作用。

【问题讨论】:

    标签: python python-3.x pywinauto


    【解决方案1】:

    findbestmatch 是一个非常低级的模块,因此通常在调用属性访问时隐式使用它(比如app.Dittoapp.window(best_match='Ditto') 是等效的)。但在您的情况下,明确使用 findbestmatch 是必要的。这是一个例子:

    from pywinauto import findbestmatch
    texts = ditto.ditto.ListView.texts()[1:] # skip window text itself, use only item texts
    items = ditto.ditto.ListView.items()
    
    found_item = findbestmatch.find_best_match('pasted', texts, items)
    print(found_item)
    

    【讨论】:

    • 非常感谢!我现在可以尝试使用它来看看它是如何工作的。我不知道app.Dittoapp.window(best_match='Ditto') 是等价的。我永远不会停止发现 pywinauto 的基础知识!
    • @我刚刚在你的问题中添加了from pywinauto.application import Applicationditto=Application().connect(path='Ditto.exe')(别笑:我很难找到它!)
    • 只是为了确定:当你说 app.MyApp 和 app.window(best_match='MyApp')` 是等价的时,它是只适用于这个特定的例子还是它是一个一般规则pywinauto?
    • 这是一般规则。 :) Python 通过覆盖类中的特殊属性访问方法使其成为可能。但如果您需要精确搜索,只需使用 window(title="MyApp")。窗口规范对象还有许多其他可能的标准。
    • 谢谢! (我会用 stackoverflow.com/questions/42213490/… 更新我的基本教程)
    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多