无法更改编辑控件的内容
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
.
升级
我正在使用 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?)
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
.