创建支持服务单
关注

Q100385:Katana中的回调和事件处理程序

摘要

本文介绍如何在Katana中注册回调或事件处理程序,并提供有关在何处查找有关可用回调和事件类型以及其回调函数的预期输入参数的信息的详细信息。
回调和事件的文档也可以在Katana开发人员指南中找到 。下面的文章提供了一些实施示例。

更多信息

回调是添加到Katana环境的一段Python代码,当Katana中发生各种事件(例如创建节点或加载脚本)时,它会自动运行。

事件是由于用户操作或其他来源(例如单击鼠标或按下键)而发生的操作。 事件处理程序是用于处理事件的例程,允许程序员编写将在事件发生时执行的代码(来自https://www.computerhope.com/jargon.htm的定义)。

Katana在某些情况下(例如在保存文件之前)触发回调,并且调用代码在继续之前等待回调执行,例如允许用户在保存项目之前修改项目。

相反,事件排队并由Katana的事件系统“稍后”处理。这意味着回调更直接,但通常也应该非常快,否则它们会在工作时冻结UI。

回调和事件处理程序在许多情况下都很有用,例如在创建新的Katana项目时更改项目设置或对某些节点参数的值更改做出反应。

回调

在Katana中,回调可用于不同的情况,例如正在启动的软件,正在加载的Katana项目或正在创建的节点。要查看可用回调的完整列表,请在Python选项卡中运行以下代码:

from Katana import Callbacks
print dir(Callbacks.Type)


要找出传递给每个回调类型的关键字参数,可以注册以下将在调用时打印输入参数的回调:

def Hello(**kwargs):
    for i in kwargs.keys():
        print i


可以在回调函数中访问这些参数,例如,如下所示:

def Hello(**kwargs):
   print(kwargs.get('filename'))

from Katana import Callbacks Callbacks.addCallback(Callbacks.Type.onSceneLoad, Hello)

事件处理程序

Katana中有许多不同的事件类型,注册处理程序可以监听。要查看所有可用事件类型的列表,请在Python选项卡中运行以下命令:

import Utils.EventModule
print Utils.EventModule.GetAllRegisteredEventTypes()

要查找每个事件类型的输入参数,可以为特定事件注册以下处理程序。触发事件时,处理程序将打印出参数:

def eventHandler(eventType, eventID, **kwargs):
    for i in kwargs.keys():
        print i


一旦输入参数已知,就可以在事件处理函数中使用它们。以下是一个示例事件处理程序,可以注册以侦听用户首选项的更改,并打印出首选项的名称及其新值:

def PrefChangedCallback(eventType, eventID, prefKey, prefValue):
    print prefKey, "preference changed to:", prefValue

Utils.EventModule.RegisterEventHandler(PrefChangedCallback, 'pref_changed')

节点参数更改的事件处理程序

例如,如果事件处理函数应该仅响应特定节点参数的更改,则可以注册它以侦听' parameter_finalizeValue '事件。可以在处理函数中检查已更改参数的名称,以确定它是否是相关参数:

def myParamCallback(eventType, eventID, node, param):
    if (node.getName() == "CameraCreate") and (param.getName() == 'fov'):
        print("FOV for the following camera changed to " + repr(param.getValue(0)) + ": " + node.getParameter('name').getValue(0))

Utils.EventModule.RegisterEventHandler(myParamCallback, "parameter_finalizeValue")

事件处理程序不一定在事件排队后立即执行。如果任何代码依赖于已处理的某个事件并执行了事件处理程序,则可能需要调用以下内容:

Utils.EventModule.ProcessAllEvents() 


有关回调和事件处理程序的更多信息,另请参阅我们的Katana开发人员指南回调和事件部分

在Katana初创公司注册回调或事件处理程序


当Katana启动时,可以自动注册回调或事件处理程序,如下所示:

  • 定义您希望回调或事件处理函数在单个Python函数中执行的所有操作,并按照以下示例代码中的说明进行注册:

from Katana import Utils, Callbacks

def PrefChangedCallback(eventType, eventID, prefKey, prefValue):
    print prefKey, "preference changed to:", prefValue

Utils.EventModule.RegisterEventHandler(PrefChangedCallback, 'pref_changed')
def Hello(**kwargs): print(kwargs.get('filename'))
Callbacks.addCallback(Callbacks.Type.onSceneLoad, Hello) 

  • 将其复制并粘贴到文本编辑器中,然后保存文件。

  • 将文件重命名为init.py,并确保在执行此操作时在文件浏览器中显示文件扩展名,以验证文件扩展名是.py而不是.txt或不同。

  • 将文件放在.katana文件夹或$ KATANA_RESOURCES环境变量中定义的路径下的Startup文件夹中。


有关KATANA _RESOURCES的更多信息,请参阅Katana在线帮助中的相应主题。

下次启动Katana时,将在指定的操作发生时执行回调函数,并在相关事件排队和处理时执行事件处理函数。在上面的示例情况中,当改变首选项或加载Katana项目时,分别将新的首选项值或项目文件路径打印到终端。

进一步的帮助


如果您在设置回调或事件处理程序时遇到任何问题,请打开支持服务单,告诉我们您到目前为止所遇到的问题和故障排除步骤。


有关如何打开支持服务单的更多信息,请参阅Q100064:如何提供支持服务单

这篇文章有帮助吗?
/

We're sorry to hear that!

Please tell us why.
2 人中有 2 人觉得有帮助

评论