[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()で設定した処理は、下記のタイミングでも呼び出されるので注意。詳しくはリファレンスマニュアルを参照のこと。

ノードの変更したKnob名と値を調べるスクリプトコード

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