概括
本文将解释如何在Nuke中设置回调,以及如何找到用于回调的正确 Python 命令。
完整的可用回调列表和示例可以在Nuke Python 开发人员指南中找到。
更多信息
回调函数是添加到Nuke环境中的一段代码,它会在Nuke中发生各种事件(例如创建节点或加载脚本)时自动调用 Python 函数。
这在很多情况下都很有用,例如在创建节点时设置旋钮值的首选项、自动保存脚本的增量版本,或者在设置新项目时更改项目设置。
下面您可以找到一个示例,说明如何创建一个回调,该回调会将Nuke中每个新创建的 Write 节点的“文件类型”设置为 EXR,并将“文件”路径设置为临时位置。
要设置回调,请按以下步骤操作(请继续阅读以了解每个步骤的更多信息):
- 在Nuke的脚本编辑器中测试这些命令,确保它们能够正常工作。
- 定义回调函数,将其添加为回调函数,并将其保存到 .nuke 文件夹下的 init.py 文件中。
- 下次Nuke启动时,当指定事件发生时,将执行回调函数。
1. 在Nuke的脚本编辑器中测试命令,确保它们能够正常运行。
要创建回调函数,通常最好先在Nuke会话中的脚本编辑器里测试 Python 命令。您可以在Nuke Python 开发人员指南》和《 Nuke Python API 参考》中找到有关可用 Python API 命令的更多信息。
通常可以在鼠标悬停在节点旋钮上时显示的标签中找到用于脚本编写的节点旋钮的名称。
例如,可以使用file来引用 Write 节点中的“文件”旋钮进行脚本编写,而可以使用file_type来引用“文件类型”旋钮进行脚本编写:
要获取特定旋钮(例如file_type )的当前值,请在脚本编辑器中运行以下命令:
node = nuke .toNode(“Write1”)
# replace Write1 with the name of your Write node if it is different
print(node["file_type"].getValue())
这将向控制台输出以下内容:
# node = nuke .toNode("Write1")
# print(node["file_type"].getValue())
# Result: 2.0
在这种情况下, 2.0是文件类型下拉列表中“ dpx ”的索引。要通过 Python 将file_type更改为“ exr ”,请在脚本编辑器中输入以下命令:
node["file_type"].setValue(3)
这是我们想要添加到回调函数中的命令之一。另一个将目标“文件”路径设置为临时位置的命令如下所示:
node["file"].setValue("/tmp/test.####.exr")
2. 定义回调函数,将其添加为回调函数,并将其保存到 .nuke 文件夹下的init.py文件中。
将回调函数要执行的所有操作定义在一个 Python 函数中,并将该函数添加为OnUserCreate回调函数,如下面的示例代码所示:
import nuke
def writeSettings():
node = nuke .thisNode()
node["file_type"].setValue(3)
node["file"].setValue("/tmp/test.####.exr")
# add callback to execute this every time a Write node is created
nuke .addOnUserCreate(writeSettings, nodeClass="Write")
将此内容复制粘贴到文本编辑器中,然后保存文件。
将文件重命名为init.py ,并在执行此操作时确保文件浏览器中显示文件扩展名,以验证文件扩展名是否为.py ,而不是.txt或其他扩展名。
您需要将此文件放置在.nuke文件夹中,这是Nuke启动时查找插件的首选位置。请参阅这篇文章来找到您的.nuke文件夹: Q100048:查找默认的 .nuke 目录
有关init.py文件及其功能的更多详细信息,请参阅以下文章: Q100490:什么是 init.py 和 menu.py 启动脚本文件
3. 下次Nuke启动时,当指定事件发生时,将执行回调函数。
完成此操作后,回调将添加到Nuke环境中,下次启动应用程序并创建新的写入节点时,它们将应用file和file_type设置。
注意:如果您希望特定类的每个节点都应用特定设置,包括打开已保存脚本时加载的设置,则可以使用nuke回调而不是nuke 。
更多帮助
如果您在设置回调时遇到任何问题,请提交支持工单,并告知我们您遇到的问题以及您目前已采取的故障排除步骤。
有关如何提交支持工单的更多信息,请参阅“ 如何提交支持工单”文章。
我们很遗憾听到
请告诉我们