[NUKE] PythonでノードのKnobの値が変更したときの処理を設定する - 三日月館【別館】開発・制作Tips集
Examples:
import nuke
# Knobが変化したときに呼ばれる関数
def func():
print('knob changed')
# ノード名の判定
node = nuke.thisNode()
print(node.name())
# 変更したKnobの判定
knob = nuke.thisKnob()
print(knob.name())
nuke.addKnobChanged(func, nodeClass='Transform') # 全てのTransformノードに処理を追加する
nuke.removeKnobChanged(func, nodeClass='Transform') # 処理を除外する
nodeObj = nuke.selectedNode()
nuke.addKnobChanged(func, node=nodeObj) # nodeObjにのみ処理を追加する
nuke.removeKnobChanged(func, node=nodeObj) # 処理を除外する
nukeモジュールのaddKnobChanged()
関数を使用すると、プロパティエディタ等でKnobの値が変わったときに実行される関数を設定可能。キーワード引数のnodeやnodeClassを使用することで、特定種類のノード全てや、特定のノードのみに設定することもできる。設定した関数を除外する場合は、同じくnukeモジュールのremoveKnobChanged()
関数を使用する。
設定した関数の中で、処理が行われているNodeやKnobを判別したい場合、それぞれnuke.thisNode()
、nuke.thisKnob()
関数でオブジェクトを取得できる。
addKnobChanged()
で設定した処理は、下記のタイミングでも呼び出されるので注意。詳しくはリファレンスマニュアルを参照のこと。
Examples:
ノードを選択し、以下のスクリプトを実行。スクリプトリスナーにKnob名と値が表示される
import nuke
# Knobが変化したときに呼ばれる関数
def knob_changed():
print('knob changed')
# ノード名の判定
node = nuke.thisNode()
print(node.name())
# 変更したKnobの判定
knob = nuke.thisKnob()
print(f'{knob.name()}: {knob.getValue()}')
node = nuke.selectedNode()
nuke.addKnobChanged(knob_changed, node=node)
Callbacks — NUKE Python Developer's Guide v10.5v1 documentation
Custom Panels — NUKE Python Developer's Guide v10.0v1 documentation