2017-02-16 100 views
2

当使用app = win32com.client.Dispatch('Some.Application')时,有什么可行的方法在PyCharm中获得代码完成?从API文档重新输入(或复制粘贴)所有内容是相当繁琐的,因此创建skeletons即可。有没有其他办法让PyCharm知道通过COM提供的接口,特别是如果我可以提供一个.tlb文件?还是至少有某种方式可以从TypeLib中自动生成这样一个框架(或一个包装模块?)?如何在PyCharm中获得COM编程的代码完成?

+1

强烈的相关:[如何使win32com-autocompletion?](https://stackoverflow.com/q/26990655/321973) - 我注意到我倾向于在几年后再次提出类似的问题......另一个问题是然而询问[tag:ipython]和'EnsureDispatch'。 –

回答

3

由于PyCharm无法知道app的运行时类型,因此您不应期望直接在app上获得代码完成;至少直到他们决定添加内置的支持来从类型库生成代码。

但是,您可以利用win32com基于the first part of this answer中描述的类型库隐式生成代码以及PyCharm支持类型提示的事实,以便在COM方法上获得代码完成。

  1. 确保Python类型已经生成;它们的位置由COM对象的GUID确定。例如,我的机器上的Microsoft Word 2016类型可在 C:\Users\username\appdata\local\temp\gen_py\3.6\00020905-0000-0000-c000-000000000046x0x8x7\中找到。
  2. 将此文件夹添加到PyCharm Python解释器的路径中;见例如this answer
  3. 导入您想要代码完成的模块。

在下面的截图中,我们使用这种方法与Word的Find

enter image description here

enter image description here

现在,除了感觉很脏,这种方法依赖于已产生的相关类型和代码完成仅限于对象发布的方法,所以我认为它在实践中的用处可能有所限制;特别是,任何使用代码的人都必须生成代码,否则注释会导致错误。就我个人而言,我可能更愿意使用Jupyter作为实施过程的探索性部分,并且通过the answer mentioned above中概述的最小调整,Jupyter可以扩展为具有完整的代码完成win32com

+0

听起来像是最好的选择,谢谢 –

相关问题