我有一个非常简单的 AutoCAD 绘图,只有两个实体:一个
MText
对象和一个 Polyline
对象,如下面的屏幕截图所示。
我想通过以下代码以编程方式从 TextString
对象(即字符串
MText
)获取 'foo'
属性:
import win32com.client
acad = win32com.client.gencache.EnsureDispatch('AutoCAD.Application')
dwg = acad.Documents.Open(r'C:\path\to\my\drawing\test.dwg')
ms = dwg.ModelSpace
for obj in ms:
if obj.EntityName == 'AcDbMText':
print(obj.TextString)
但我收到此错误:
Traceback (most recent call last):
File "<ipython-input-299-e8bbc8ec7f92>", line 3, in <module>
print(obj.TextString)
File "D:\anaconda3\lib\site-packages\win32com\client\__init__.py", line 473, in __getattr__
raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))
AttributeError: '<win32com.gen_py.AutoCAD 2021 Type Library.IAcadEntity instance at 0x2562970331648>' object has no attribute 'TextString'
这很奇怪,因为一年前这段代码运行良好。我在这里缺少什么?
我对使用 Python 编程 AutoCAD 不太了解。据我所知,使用 COM/ActiveX API,MText 对象确实有一个 TextString 属性,但没有 EntityName 属性,您应该使用 ObjectName。
正确的方法是:
import win32com.client
acad = win32com.client.gencache.EnsureDispatch('AutoCAD.Application')
dwg = acad.Documents.Open(r'C:\path\to\my\drawing\test.dwg')
ms = dwg.ModelSpace
for obj in ms:
if obj.EntityName == 'AcDbMText':
mtext = win32com.client.CastTo(obj, "IAcadMText")
print(mtext.TextString)