0

我是一名生物学家,也是 pywinauto 的新手,我编写了一个代码来使用 pywinauto 在 HYPHY 应用程序中打开一个输入文件,当我在命令行中逐行运行我的代码时,它工作正常,但是当我将代码作为批处理文件运行时,它给出了以下错误。

Traceback (most recent call last):
File "C:\Users\Masyh\Desktop\autowin_test.py", line 8, in <module>
w_handle = pywinauto.findwindows.find_windows(title=u' Please select a batch file to run:',   class_name='#32770')[0]
IndexError: list index out of range

代码是:

import pywinauto

pwa_app = pywinauto.application.Application()
w_handle = pywinauto.findwindows.find_windows(title=u'HYPHY Console', class_name='HYPHY')[0]
window = pwa_app.window_(handle=w_handle)
window.SetFocus()
window.MenuItem(u'&File->&Open->Open &Batch File\tCtrl+O').Click()
w_handle = pywinauto.findwindows.find_windows(title=u' Please select a batch file to run:',        class_name='#32770')[0]
window = pwa_app.window_(handle=w_handle)
window.SetFocus()

ctrl = window['Edit']
ctrl.Click()
ctrl.TypeKeys('brown.nuc')
ctrl=window['&open']
ctrl.Click()

我想问题是获取输入的窗口(#'请选择批处理文件菜单')在开始时没有打开,代码的第一部分打开它但是python从头开始寻找它并且找不到它. 我真的很感激如何解决这个问题的任何建议。

4

1 回答 1

1

执行检查时该窗口似乎不存在。您应该等待一段时间以打开窗口。尝试下一个构造:

a_check = lambda: pywinauto.findwindows.find_windows(title=u' Please select a batch file to run:',        class_name='#32770')[0]
try:
    w_handle = pywinauto.timings.WaitUntilPasses(timeout=10, retry_interval=1, a_check)
except:
    print('Something went wrong')

此外,您的问题可能是由窗口具有额外的属性/状态引起的。例如,隐形。使用 find_windows 中允许的参数来处理这种情况,这里是带有默认值的参数列表:

pywinauto.findwindows.find_windows(class_name=None,class_name_re=None, parent=None, process=None, title=None, title_re=None, top_level_only=True, visible_only=True, enabled_only=False, best_match=None, handle=None, ctrl_index=None, predicate_func=None, active_only=False, control_id=None)
于 2014-05-04T20:15:53.427 回答