两种主要方式
Python 与 SolidWorks 交互主要有两种方式:

-
SOLIDWORKS API (通过
pywin32):- 原理:SolidWorks 提供了一个基于 COM (Component Object Model) 的应用程序接口,Python 可以通过
pywin32库来调用这个 COM 接口,直接控制 SolidWorks 应用程序、打开的文档、模型、特征、属性等所有对象。 - 优点:
- 功能最强大、最全面:可以访问 SolidWorks API 的几乎每一个功能,从创建草图、拉伸切除到生成工程图、配置、调用插件等无所不能。
- 与 SolidWorks 内置宏语言 (VBA) 高度相似:如果你有 VBA 编程经验,学习起来会非常快。
- 缺点:
- 仅限 Windows:COM 是 Windows 特有的技术。
- 环境配置稍复杂:需要安装 SolidWorks、Python 和
pywin32。 - 调试相对困难:错误信息可能不够直观。
- 原理:SolidWorks 提供了一个基于 COM (Component Object Model) 的应用程序接口,Python 可以通过
-
SOLIDWORKS PDM (产品数据管理) API:
- 原理:如果你使用的是 SOLIDWORKS PDM 来管理你的文件和流程,Python 可以通过其专有的 API 来与 PDM 服务器交互。
- 优点:
- 强大的文件管理能力:可以自动化文件的检入/检出、版本控制、工作流、权限管理、属性数据读写等。
- 无需打开 SolidWorks:操作在服务器端进行,效率更高。
- 缺点:
- 范围有限:只能操作 PDM 相关的功能,不能直接创建或修改 3D 模型。
对于绝大多数用户来说,第一种方式 (pywin32 + SW API) 是你需要的。
使用 pywin32 操作 SolidWorks API
这是最主流、最强大的方法。

第 1 步:环境准备
-
安装 SolidWorks:
确保你的电脑上已经安装了 SolidWorks,最好是较新的版本(如 2025 或更高),因为新版本通常支持更多的 API 功能。
-
安装 Python:
- 推荐从 Python 官网 下载并安装 Python。重要:在安装时,请务必勾选 "Add Python to PATH" 选项。
-
安装
pywin32库:- 打开命令提示符 或 PowerShell,运行以下命令:
pip install pywin32
- 安装完成后,最好重启一下电脑,以确保
pywin32的组件被正确注册。
- 打开命令提示符 或 PowerShell,运行以下命令:
第 2 步:基础编程模型
SolidWorks API 是一个面向对象的层次结构,你需要从顶层开始,一步步往下访问。
SldWorks:代表 SolidWorks 应用程序本身,这是你操作的起点。ModelDoc2:代表一个打开的文档,可以是零件 (PartDoc)、装配体 (AssemblyDoc) 或工程图 (DrawingDoc)。Feature:代表模型中的一个特征(如拉伸、旋转、切除等)。Body2/Surface:代表实体或曲面。SelectionMgr:选择管理器,用于获取用户在图形区域中选择的对象。
基本流程:
- 连接到或启动 SolidWorks 应用程序。
- 打开一个现有的文档,或创建一个新的文档。
- 获取文档对象。
- 通过文档对象访问其下的模型、特征、选择管理器等。
- 执行你想要的操作(如创建特征、修改尺寸、添加属性等)。
- 保存并关闭文档。
第 3 步:一个简单的“Hello World”示例
让我们从一个最简单的例子开始:让 SolidWorks 弹出一个消息框。
import win32com.client
# 1. 连接到 SolidWorks 应用程序
# SolidWorks 已经打开,它会附加到现有实例
# 如果没有打开,它会启动一个新的实例
try:
sw_app = win32com.client.Dispatch("SldWorks.Application")
except Exception as e:
print(f"无法启动或连接到 SolidWorks: {e}")
exit()
# 2. 让 SolidWorks 窗口可见
sw_app.Visible = True
# 3. 弹出一个消息框
sw_app.SendMessageBox("你好,Python!我是 SolidWorks。", 0, "来自 Python 的问候")
print("操作完成!")
如何运行:
- 确保你的 SolidWorks 已经启动。
- 将上述代码保存为
.py文件(hello_sw.py)。 - 在命令行中运行
python hello_sw.py。
你应该会看到 SolidWorks 窗口被激活,并弹出一个消息框。
第 4 步:一个更实用的例子 - 创建一个简单的零件
这个例子会创建一个新的零件,绘制一个矩形,然后将其拉伸成一个实体。
import win32com.client
import os
import math
# --- 1. 连接到 SolidWorks ---
try:
sw_app = win32com.client.Dispatch("SldWorks.Application")
sw_app.Visible = True
except Exception as e:
print(f"无法启动或连接到 SolidWorks: {e}")
exit()
# --- 2. 创建一个新的零件文档 ---
# 检查是否已经打开了文档,如果有则关闭
if sw_app.ActiveDoc:
sw_app.ActiveDoc.ForceCloseDoc()
# 新建一个零件
new_part = sw_app.NewDocument(os.path.join(sw_app.GetAppDataPath(), "templates", "prt.sldprt"), 0, 0, 0)
if not new_part:
print("创建新零件失败!")
exit()
# --- 3. 获取模型和草图管理器 ---
# ModelDoc2 对象
model = sw_app.ActiveDoc
# 草图管理器
sketch_mgr = model.SketchManager
# --- 4. 绘制草图 ---
# 在“前视基准面”上创建一个新草图
sketch_mgr.InsertSketch(True) # 前视基准面的索引是 2
# 创建一个矩形
# SketchPoint 是相对坐标 (0,0) 是草图原点
sketch_mgr.CreateRectangle(-0.05, -0.03, 0, 0.05, 0.03, 0)
# --- 5. 拉伸特征 ---
# 获取特征管理器
feat_mgr = model.FeatureManager
# 拉伸草图
# 参数: 深度, 反侧, 类型, 角度, 薄壁, 薄壁类型, 薄壁厚度, 方向1, 方向2, 拔模角度, 拔模方向, 使用切线延伸
depth = 0.02
feat_mgr.BaseExtrusion2(True, False, 0, depth, False, 0, 0, False, False, 0, False, False)
# --- 6. 保存零件 ---
# 定义保存路径
save_path = r"C:\Temp\python_created_part.SLDPRT"
# 确保目录存在
os.makedirs(os.path.dirname(save_path), exist_ok=True)
# 保存文档
model.SaveAs(save_path)
print(f"零件已成功创建并保存到: {save_path}")
代码解析:
sw_app.NewDocument(...): 创建一个新的文档,需要指定模板文件路径。model.SketchManager: 这是所有草图操作的入口。sketch_mgr.InsertSketch(True): 在默认的“前视基准面”上创建一个草图。True表示使用默认基准面。sketch_mgr.CreateRectangle(...): 在草图中创建一个矩形,参数是两个对角点的坐标。model.FeatureManager: 这是所有特征操作的入口。feat_mgr.BaseExtrusion2(...): 将选中的草图拉伸成一个基础特征,参数很多,但前几个关键:True(反向拉伸),False(薄壁),0(拉伸类型),depth(拉伸深度)。model.SaveAs(...): 将文档保存到指定路径。
第 5 步:学习资源和调试技巧
-
最重要的资源:SolidWorks API 帮助
- 在 SolidWorks 安装目录下,找到一个名为
swsupport.chm或api.chm的文件,这是你最好的老师!它包含了所有对象、方法、属性的详细说明和示例代码(通常是 VBA,但很容易转换成 Python)。 - 你也可以通过 SolidWorks 的
工具 -> 宏 -> 宏编辑器,在 VBA 编辑器中按F2打开对象浏览器,来探索 API 结构。
- 在 SolidWorks 安装目录下,找到一个名为
-
调试技巧
- 使用
print()和dir():在代码中插入print(obj)来查看对象的内存地址(确认对象存在),使用dir(obj)来查看一个对象有哪些方法和属性。 - 录制宏:在 SolidWorks 中手动执行你想做的操作(比如画一个圆),然后通过
工具 -> 宏 -> 录制...将其录制成一个 VBA 宏,在宏编辑器里查看生成的 VBA 代码,这能给你提供非常直接的 API 调用示例。 - 逐步执行:在 VS Code 或 PyCharm 等 IDE 中设置断点,逐步执行你的 Python 代码,观察每一步 SolidWorks 的状态变化。
- 使用
使用 sldworks 库 (非官方,但更易用)
有一个名为 sldworks 的第三方库,它是对 pywin32 的一次封装,旨在提供更“Pythonic”的语法,简化 API 调用。
安装
pip install sldworks
示例:用 sldworks 创建零件
import sldworks
import os
# 连接到 SolidWorks
sw = sldworks.SldWorks()
# 创建新零件
part = sw.new_part()
# 获取草图管理器
sketch = part.sketch_manager
# 在前视基准面上创建草图
sketch.insert_sketch()
# 创建矩形
sketch.create_rectangle(-0.05, -0.03, 0, 0.05, 0.03, 0)
# 拉伸
part.feature_manager.base_extrusion(True, False, 0, 0.02, False, 0, 0, False, False, 0, False, False)
# 保存
save_path = r"C:\Temp\python_created_part_sldworks_lib.SLDPRT"
os.makedirs(os.path.dirname(save_path), exist_ok=True)
part.save_as(save_path)
print(f"使用 sldworks 库创建零件成功: {save_path}")
优点:
- 语法更简洁,
sw.new_part()比sw_app.NewDocument(...)更直观。 - 减少了
win32com.client.Dispatch等繁琐的初始化步骤。
缺点:
- 非官方:由社区维护,可能无法覆盖最新的 SolidWorks API 功能,或者存在一些 Bug。
- 文档较少:主要依赖源码和 SolidWorks 官方 API 帮助。
建议:对于初学者,可以先尝试 sldworks 库快速入门,当你需要更复杂的功能时,再回归到原生 pywin32 调用。
总结与建议
| 特性 | pywin32 (原生 API) |
sldworks (第三方库) |
|---|---|---|
| 易用性 | 较低,学习曲线陡峭 | 较高,语法简洁 |
| 功能完整性 | 最高,100% 覆盖官方 API | 可能不完整,依赖社区更新 |
| 稳定性 | 非常稳定,官方支持 | 取决于库的维护状态 |
| 适用场景 | 复杂自动化、深度定制 | 快速原型、简单脚本、初学者 |
给你的学习路径建议:
- 从
sldworks库开始:安装它,运行上面的示例,感受一下 Python 控制 SolidWorks 的魅力,这能让你快速建立信心。 - 学习
pywin32和官方 API:当你需要sldworks库无法实现的功能时,请务必学习pywin32,这是成为 SolidWorks 自动化专家的必经之路。 - 善用“录制宏”:这是将手动操作转换为代码的最高效方法。
- 深入阅读
api.chm:这是你最权威的参考手册。
希望这个详细的指南能帮助你顺利开启 Python 操作 SolidWorks 的旅程!如果你在具体实现中遇到问题,可以随时提出。
