如何用Python(pyRevit)存储Revit插件设置?
用pyRevit实现Revit插件文件路径的持久化配置方案
刚好之前做过类似的需求,用pyRevit自带的设置存储功能就能完美解决,不用自己手动写配置文件,还能自动持久化到本地,重启Revit也不会丢失设置。给你一套完整的实现方案:
核心思路
pyRevit提供了script.get_settings()方法,可以获取当前插件的专属配置实例,这些配置会以JSON格式保存在用户本地的pyRevit设置目录中,天然支持持久化。我们只需要:
- 首次使用时弹出文件选择框让用户指定路径
- 将选中的路径保存到插件配置中
- 后续启动时直接读取配置里的路径,若路径不存在则重新引导用户选择
完整代码实现
import os from pyrevit import script, forms def get_configured_file_path(): # 获取当前插件的设置实例 settings = script.get_settings() # 尝试读取已保存的文件路径 saved_path = settings.get('target_text_file', None) # 检查路径是否有效:未保存过 或 路径不存在 if not saved_path or not os.path.exists(saved_path): # 弹出文件选择对话框,限制txt格式 saved_path = forms.pick_file( title="请选择需要读取的文本文件", file_ext="txt", multiple=False ) if saved_path: # 将路径保存到设置中 settings.set('target_text_file', saved_path) # 确保设置写入本地文件 settings.save() else: # 用户取消选择,弹出提示并退出脚本 forms.alert("未选择目标文件,插件将退出", exitscript=True) return saved_path # 主逻辑 if __name__ == "__main__": file_path = get_configured_file_path() # 读取文件内容示例 try: with open(file_path, 'r', encoding='utf-8') as f: file_content = f.read() forms.alert(f"成功读取文件内容:\n{file_content[:100]}...", title="读取成功") # 这里替换成你的业务逻辑 except Exception as e: forms.alert(f"读取文件失败:{str(e)}", title="错误")
关键细节说明
- 设置的存储位置:配置会自动存在
%APPDATA%\pyRevit\Settings目录下,每个插件对应一个独立的JSON文件,不会和其他插件的配置冲突。 - 路径有效性检查:每次启动都会检查保存的路径是否存在,避免因为文件被移动或删除导致插件崩溃。
- 用户体验优化:只有在必要时才弹出选择框,正常情况下直接读取配置,减少用户操作。
扩展功能建议
如果需要让用户随时修改路径,可以在插件里加一个“修改文件路径”的按钮分支,比如:
# 新增修改路径的逻辑 if forms.alert("是否需要修改文件路径?", yes=True, no=True): new_path = forms.pick_file(title="请选择新的文本文件", file_ext="txt") if new_path: settings.set('target_text_file', new_path) settings.save() forms.alert("路径已更新", title="成功")
内容的提问来源于stack exchange,提问作者Arnaud




