Nuke学习笔记
Nuke API 文档
- 本地文档:C:\Program Files\Nuke12.2v2\Documentation
- 在线文档:https://learn.foundry.com/nuke/12.2/content/misc/nuke_devs.html
- Nuke Python Developers Guide: 案例教程
- Python Scripting Reference: API 参考文档
- TCL Scripting Reference: TCL 表达式参考文档
工具加载
开启 nuke 时,系统会加载两个安装目录的Plugins文件夹下的两个文件:
- init.py : 用于Nuke的环境设置、系统选项和默认参数,不能包含任何界面相关操作,命令行模式和GUI模式下均加载。
- menu.py :用于跟界面相关的设置、自定义菜单、工具架,仅GUI模式加载。
位于用户文件夹下存放用户预设的.nuke文件夹,其下的init.py和menu.py用于存放用户预设。
加载工具方式
- 加载工具不运行:仅需要在init.py导入模块的主函数即可,再通过工具界面去调用主函数
加载工具相关函数
- 获取插件和图标的搜索路径 nuke.pluginPath()
- 向系统搜索路径添加路径到开头,并加载路径下的init.py nuke.pluginAddPath(“pathstr or pathList”)
- 向系统搜索路径添加路径到结尾,但不加载路径下的init.py nuke.pluginAppendPath(“pathstr or pathList”)
- 检测指定的函数或插件是否存在 nuke.pluginExists(“pluginName or path or fileName”)
- 返回所有已经加载的插件的文件路径列表 nuke.pligins(num,”re表达式过滤”,”re表达式过滤”,…) num为 0,1,2,3
Nuke环境变量
NUKE_PATH、OFX_PLUGIN_PATH都是列表后面的路径先加载,以反向解析加载路径的方式进行的,因此涉及继承和覆盖的通用配置需要放在列表后面,特殊和本地的配置放在列表开头。nuke.pluginPath是正向解析加载方式。
- NUKE_PATH 搜索 Nuke 的init.py 和menu.py文件的路径,可以将插件放在不同的位置,并且每一个插件都有各自的init.py和menu.py文件,就不用将所有插件都写入 .nuke 文件夹下的文件中,实现分布式管理
- OFX_PLUGIN_PATH 用来设置和加载ofx插件的位置,指向ofx的安装路径
自定义菜单常用类型
Nuke的菜单界面和Qt是两套体系,Nuke 界面不属于Qt范畴
- 菜单栏工具
- nuke.menu(“Nuke”)
- 工具栏工具
- nuke.menu(“Nodes”)
- NodeGraph中右键工具
- nuke.menu(“Node Graph”)
自定义菜单函数
nuke.Menu 菜单类型
- nuke.menu(“Nuke”).findItem(“菜单项名称”) 查找指定菜单项
- 菜单项名称可以是相对于顶级菜单项的名称 nuke.menu(“Nuke”).findItem(“菜单项1/菜单项2/菜单项3”)
- nuke.menu(“Nuke”).menu(“菜单项名称”) 查找指定菜单项
- nuke.Menu.items() 返回查询到的菜单项
- nuke.menu(“Nuke”).addMenu(“新加项”,icon=””,tooltip=””,index=””) 创建新菜单,其中新加项也是相对路径,index添加位置,默认为-1,只对要添加的最后一级菜单项有效
- nuke.menu(“Nuke”).addcommand(“新加项”,”脚本字符串”,“快捷键”,”icon”,”tooltip”,”index”) 添加菜单项命令,其中 “脚本字符串”可以为可执行的Python语句,或lambda函数,若没有指定命令,则会默认为创建一个名为新加项的节点。
- nuke.menu(“Nuke”).removeItem(“删除项”) 删除指定的菜单,其中删除项不为相对路径,要删除指定项,需要从指定级的上一级删除,空菜单会自动删除
- nuke.menu(“Nuke”).clearMenu() 删除菜单下的所有菜单项,也不支持相对路径,不会删除当前空菜单
- nuke.menu(“Nuke”).findItem(“菜单项名称”) 查找指定菜单项
nuke.MenuItem 创建菜单项类
- nuke.menu(“Nuke”).findItem(“菜单项”).action() 获取QAction对象,其父对象是QMainWindow
- nuke.menu(“Nuke”).findItem(“菜单项”).invoke() 直接执行menuItem,等同于nuke.menu(“Nuke”).findItem(“菜单项”).action().trigger()
- nuke.menu(“Nuke”).findItem(“菜单项”).script() 返回对应的字符串,如果是lambda函数,其返回值是空
- nuke.menu(“Nuke”).findItem(“菜单项”).setScript() 重新设置字符串
nuke.menu(“菜单名”) 获取指定的根菜单,以下列出部分菜单名
- Nuke 菜单栏
- Nodes 工具栏
- Node Graph NodeGraph中的右键菜单
- Viewer Viewer菜单
- Properties 节点属性对话框中的右键菜单
- Animation 动画控件和曲线编辑器右键菜单
- Pane 界面中面板布局右键菜单
- Axis 坐标右键菜单
获取当前软件QT对象
from Pyside2 import QtWidgets
allWin = [w for w in QtWidgets.QApplication.instance().topLevelWidgets() if w.windowTitle() == "窗口提示"]
allMenu = [w for w in allWin[0]children() if isinstance(w,QtWidgets.QMenuBar)]
menubar = allMenu[0]