如何在PyCharm中获得COM编程的代码完成?

时间:2017-02-16 12:03:50

标签: python pycharm win32com code-completion typelib

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

1 个答案:

答案 0 :(得分: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. 导入要完成代码的模块。
  4. 在下面的屏幕截图中,我们将这种方法与Word Find一起使用:

    enter image description here

    enter image description here

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