我很难想出一个好的标题,所以我就在这里解释一下。我在Maya中使用Python,它有一些事件回调选项,因此您可以执行类似on save: run function
的操作。我有一个用户界面类,我希望它在某些事件被触发时更新,我可以这样做,但我正在寻找一种更干净的方法来做。在
下面是一个与我所拥有的类似的基本示例:
class test(object):
def __init__(self, x=0):
self.x = x
def run_this(self):
print self.x
def display(self):
print 'load user interface'
#Here's the main stuff that used to be just 'test().display()'
try:
callbacks = [callback1, callback2, ...]
except NameError:
pass
else:
for i in callbacks:
try:
OpenMaya.MEventMessage.removeCallback(i)
except RuntimeError:
pass
ui = test(5)
callback1 = OpenMaya.MEventMessage.addEventCallback('SomeEvent', ui.run_this)
callback2 = OpenMaya.MEventMessage.addEventCallback('SomeOtherEvent', ui.run_this)
callback3 = ......
ui.display()
回调将一直持续到Maya重新启动,但如果向其传递从addEventCallback
返回的值,则可以使用removeCallback
将其移除。我目前的方法是在设置变量之前检查变量是否已设置,这比前面的test().display()
的一行要混乱得多
有没有一种方法可以让我在函数中整洁地完成它?如果我再次运行test
类或类似的东西,它会删除旧的?在
有两种方法可以让你试试。在
您可以有一个表示回调管理器的持久对象,并允许它自己挂接和取消挂钩。在
在这个版本中,只要希望回调持续,您就可以存储所创建的回调处理程序,然后手动卸载它们,或者在不再需要它们时让它们脱离作用域。在
另一个选择是创建自己的对象来表示回调,然后添加或删除希望它在自己的代码中触发的任何函数。这使得管理层完全站在您这边,而不是依赖于api,api的好坏取决于您的需求。您将有一个可调用的
Event()
类(使用__call__()
),它将有一个函数列表,然后其“__call__()
”被Maya调用。这里有一个您想要的事件处理程序对象的例子here相关问题 更多 >
编程相关推荐