gpt4 book ai didi

python - 通过 makepy 添加了 AutoCAD 的 typelib,现在 win32com 不适用于 AutoCAD

转载 作者:太空宇宙 更新时间:2023-11-03 19:23:24 29 4
gpt4 key购买 nike

我已经运行 win32com 来访问 AutoCAD 相当长一段时间了,没有出现任何问题。我了解到应用 makepy 实用程序可以在交互式提示下创建更加用户友好的体验,因此我运行它并添加了“AutoCAD 2006 类型库”。现在,我以前访问的一些常用属性不再可用。考虑代码:

acad = win32com.client("AutoCAD.Application")
doc = acad.Documents.Open('mydoc.dwg')
ms = doc.ModelSpace
count = ms.Count #counts all entities in dwg

for i in range(count):
item = ms.Item(i)
if 'block' in item.ObjectName.lower():
print item.Name
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 462, in
__getattr__ raise AttributeError("'%s' object has no attribute '%s'"
(repr(self),attr))
AttributeError: '<win32com.gen_py.AutoCAD 2006 Type Library.IAcadEntity instance
at 0x34894552>' object has no attribute 'Name'

Name 一直是 block 的可访问属性,直到我运行 makepy 为止。我尝试重新安装 Windows 版 Python,看看是否会重置它,但没有成功。

ma​​kepy 是否会在实现时创建另一个我需要删除的文件?

我的许多脚本都依赖于 Name 属性。如果您能提供任何建议或帮助,我们将不胜感激。

最佳答案

此属性错误的主要原因是您的 COM 服务器已从后期绑定(bind)(动态)转变为早期绑定(bind)(静态)。

  • 在后期绑定(bind)中,每当调用方法时,都会在对象中查询该方法,如果成功,则可以进行调用。
  • 在早期绑定(bind)中,对象模型的信息是根据对象调用提供的类型信息预先确定的。早期绑定(bind)使用 MakePy。此外,早期绑定(bind)区分大小写。

有两种方法可以解决此问题:

  1. 使用动态模块强制您的代码以面向后期绑定(bind)的方式工作。使用示例:

    win32com.client.dynamic.Dispatch() 而不是 win32com.client.Dispatch()

  2. 使用驼峰式敏感关键字来实现早期绑定(bind)方式。使用示例:

    excel.Visible() 而不是 excel.VISIBLE()excel.visible()

因此请尝试使用dynamic.Dispatch或区分大小写的变量名称。

关于python - 通过 makepy 添加了 AutoCAD 的 typelib,现在 win32com 不适用于 AutoCAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9024668/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com