Nuke学习笔记

Nuke API 文档

工具加载

开启 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.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]