2

当我尝试添加旋钮时,出现“旋钮已连接到节点”

当我尝试从 menu.py 按钮运行我的代码时,我得到了这个。如果我从脚本编辑器运行脚本,我没有收到错误。为什么会这样?

for i in nuke.allNodes():
    if not i.knob("tempMb"):
        if sum0 == 0:
            nuke.message("first tmp knob created")
            i.addKnob(t)
        elif sum0 != 0:
            nuke.message("second tmp knob created")
    else: 
        nuke.message("no nob created")     

即使我检查是否有一个名为 tempMb 的旋钮.. 它仍然像没有一样执行它,当有.. 编辑:“t”之前定义为 Int_Knob ...

谢谢!

4

3 回答 3

1

首先,我要将 更改elif为 只是else因为您的 if 条件已经在测试 elif 条件,而我看不到在这段代码中会发生什么变化。

for i in nuke.allNodes():
    if not i.knob("tempMb"):
        if sum0 == 0:
            nuke.message("first tmp knob created")
            i.addKnob(t)
        else:
            nuke.message("second tmp knob created")
    else: 
        nuke.message("no nob created")

其次,我假设它i.knob(string)不会检查是否存在该名称的旋钮,否则您的代码将表现得更符合您的预期。因此,当我阅读文档时,似乎可能会发生几件事:

  1. 节点可能是也可能不是返回列表中的旋钮。如果你知道你只想要旋钮,你可以按类类型过滤。我认为这可能看起来像nuke.allNodes(nuke.Knob)
  2. 我不认为 nuke.Knob.knob(str) 是对其名称或标签的测试。我阅读文档暗示您的测试应该是:if i.name != "tempMb":或者可能if i.label != "tempMb"取决于您如何创建t.

继续前进,我认为这里可能存在逻辑错误。如果您有 2 个节点(并且如果您进行了上述更改,我们假设它们都是旋钮),并且当您遍历所有节点时,第一个节点是tempMb,那么当您检查第二个节点时,它不会是那个和您将尝试添加t,我假设它也已命名tempMb。所以这就是为什么它看起来好像负面情况总是在发生。

您需要通过以下两种方式之一进行重组:

  1. 在循环之前,设置一个 false 布尔值,在循环中,当tempMb找到旋钮时将其设置为 true;一旦发生这种情况,您也可以退出循环。循环后检查布尔值是否可以安全添加t.
  2. 我看到了一个可能的函数nuke.exists(s),它告诉你是否有任何名为s.

也许删除循环并编写以下内容:

 if not nuke.exists("tempMb"):
     # Add your knob. I'm actually not seeing `addKnob` in the docs.
于 2016-09-26T00:05:29.013 回答
1

试试这个解决方案:

t = nuke.Int_Knob( 'tempMb', 'tempMb' )

for i in nuke.allNodes():
    if not i.knob("tempMb"):
        if nuke.exists("sum0"):
            nuke.message("First tmp knob created")
            i.addKnob(t)
        else:
            nuke.message("Second tmp knob created")
    else: 
        nuke.message("No knob created")

在此处输入图像描述

于 2016-10-15T08:53:09.130 回答
0

nuke.exists("Name of Knob")将检查您的旋钮是否存在。尝试在 if 语句中使用它。

有关Nuke 论坛的更多详细信息。

另请参阅有关 nuke.exists 的文档

于 2016-09-26T00:18:09.590 回答