Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyWinAuto记事本自动化示例vs';现实生活';例子_Python_Pywinauto - Fatal编程技术网

Python PyWinAuto记事本自动化示例vs';现实生活';例子

Python PyWinAuto记事本自动化示例vs';现实生活';例子,python,pywinauto,Python,Pywinauto,我需要做的是单击一个菜单项并加载一个文件。我喜欢这个记录良好的记事本示例,它是这样的 from pywinauto import Application app = Application (backend="uia").start("notepad.exe") app.UntitledNotepad.menu_select("File->SaveAs") Sub=app.UntitledNotepad.child_window(title_re="Save As", class_nam

我需要做的是单击一个菜单项并加载一个文件。我喜欢这个记录良好的记事本示例,它是这样的

from pywinauto import Application

app = Application (backend="uia").start("notepad.exe")
app.UntitledNotepad.menu_select("File->SaveAs")
Sub=app.UntitledNotepad.child_window(title_re="Save As", class_name="#32770")
Sub.FileNameCombo.type_keys("temp_12345.txt")    
效果很好。但是,当我为我的应用程序调整此代码并尝试运行菜单时,会引发“AttributeError”异常。我很确定这是因为我的应用程序中的菜单条是uia_controls.MenuWrapper类型,不支持菜单选择

我尝试了一种不同的方法-如下所示

app = Application(backend='uia').start(r"C:\Program Files (x86)\myapplication.exe")
time.sleep(1)
win = app.MyApplication
win['File'].select() # exapnd submenu
#Added AFTER I asked the question - i finally worked it out...
sub = win['File']
loadConfigMenuItem = (sub.children()[0])
loadConfigMenuItem.click_input() #print statement is executed
#loadConfigMenuItem.select() #print statement is NOT executed until I close the dialog box
print("If this prints, then I am a happy Man")

这将展开“文件”菜单。但是,从现在起,我无法访问此菜单的子元素。有什么想法吗?

我回答了我自己的问题。查看代码列表,尤其是

loadConfigMenuItem.click_input()
这里的关键是单击菜单项并继续执行,从而使我能够获得对单击菜单项后出现的对话框的引用

相反,如果你要使用

loadConfigMenuItem.select()

在对话框关闭之前,此调用之后不会执行任何代码。

我想我回答了我自己的问题。我想我回答了我自己的问题。我编辑了代码以显示单击输入的使用。请注意,单击输入和选择之间存在巨大差异。使用select“单击”菜单项并打开相应的windows“打开”对话框,但在对话框关闭之前,在调用select后不会执行任何代码。使用click_输入意味着代码是在对话框打开后运行的,因此允许我自动处理对话框中的内容:-)是的,这是一种错误的应用程序端阻塞处理程序。只有
单击输入()
如果不使用线程,这里的变通方法才有帮助。我正在考虑将来的非阻塞线程实现,为用户隐藏细节,但这是一个非常长期的计划。请张贴您自己的答案并接受。在StackOverflow上没问题。这也是向其他人发出的问题已解决的信号。