无法更改编辑控件的内容

Cannot change content of an Edit control

我正在使用 pywinauto 在某些软件中打开文件。我的代码应该使用“打开”对话框打开特定文件:

import pywinauto
from pywinauto.application import Application

app = Application(backend="uia").start(cmd_line="C:\Program Files (x86)\... etc")
app.Dialog.Close.click()
app.FORAM3.Derivative.OpenSpectrum.click()
app.FORAM3.Open.Edit.SetEditText(r"C:\Users\... etc")

代码打开软件并点击"Open Spectrum"按钮,在那里它得到标准的打开对话框:

在行 app.FORAM3.Open.Edit.SetEditText("Paracetamol 4.foram") 上,我得到一个 pywinauto.findwindows.ElementNotFoundError,指出它找不到一个元素或一个名为 SetEditText.

的方法

我已经在互联网上四处寻找,找不到任何解决方案。

来自 SourceForge 的

How to open an existing file using pywinauto 说使用 app.Open.Edit.SetEditText.

我尝试使用 app.Open.Edit,删除 "FORAM3" 部分,但找不到 "Open"。

我用 app.Dialog.Edit 替换了它,它给了我原来的 ElementNotFoundError

我也查看了Open an existing excel workbook using pywinauto,但是这个问题的答案建议在excel 本身内打开文件,这不适用于我。

我什至尝试用 TypeKeys 替换 SetEditText 并得到 AttributeError: Neither GUI element (wrapper) nor wrapper method 'TypeKeys' were found (typo?)

在另一个问题中,"Open file from windows file dialog with python automatically"建议使用pywinauto,给出如下代码:

from pywinauto import application
app = application.Application().start_('notepad.exe')
app.Notepad.MenuSelect('File->Open')
# app.[window title].[control name]...
app.Open.Edit.SetText('filename.txt')
app.Open.Open.Click()

我再次尝试使用 SetText 并再次收到 AttributeError 说找不到具有该名称的元素或方法。

这个特定问题的公认答案是使用 ctypes。如果我在 pywinauto 中找不到解决方案,我可能会求助于此。这个问题也被建议作为 Choosing a file in Python with simple Dialog 的可能重复项,所以我查看了那个。

此处接受的答案建议使用 Tkinter。另外两个建议使用 easygui 和 Zenity。不是我想要的。其他答案中没有提到pywinauto。

我不是在问如何打开文件。从我看过的答案中,我可以清楚地看到如何打开文件。我的问题是:为什么它不起作用?很明显,我的代码无法识别所建议的任何这些方法,因此一定有其他问题。

我开始使用 Inspect.exe

层次结构的一部分有一个名称为空字符串的窗格。这可能是问题所在,但是我在其他带有空窗格的软件上工作过。在那些情况下,我已经能够忽略空窗格并仍然使用子控件。还有三个不同的控件,名称为 "Filename",这可能是个问题,但是由于我提到了 Edit 控件,它只能是其中之一。我做了一个快速检查,看看我是否必须将 Edit 控件作为 combo box 的子控件引用,使用行 app.Dialog.combobox.Edit.SetText,并再次获得相同的 AttributeError .

我解决问题的最后一次尝试 是尝试使用不同的控制台。我一直在 PyCharm 中 运行 设置我的代码,发现 a question on jetbrains 询问是否可以在外部控制台中从 PyCharm 中 运行 代码,说明PyCharm 控制台没有 windows cmd.exe 所具有的低级控制。

我 运行 我的代码在 IDLE shell 中,得到了同样的错误:

我在常规 python 命令提示符中尝试 运行ning 代码,但它因同样的错误而关闭。这似乎足以表明 PyCharm 本身不是这里的问题。

因此,重申一下:为什么 python 无法识别任何 Edit 控制方法?

backend="uia" 提供不同的层次结构和不同的方法名称(有时)。默认后端是 "win32",所以旧的记事本示例并不总是与 "uia" 后端相关。此外,旧的 CamelCase 方法在 0.6.5 中已弃用,它们甚至仅存在于 "win32" 后端中。为 "uia" 后端使用 PEP-8 方法名称,如 set_text。并按 pip install -U pywinauto.

升级