<p>首先,我将把<code>elif</code>改为<code>else</code>,因为你的if条件已经在测试elif条件,我看不出在这段代码中这是如何变化的。在</p>
<pre><code>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")
</code></pre>
<p>第二,我假设<code>i.knob(string)</code>没有检查该名称的旋钮是否存在,或者您的代码会表现得更像您预期的那样。所以当我读到<a href="https://docs.thefoundry.co.uk/nuke/80/pythonreference/nuke-module.html#allNodes" rel="nofollow">the docs</a>时,似乎会发生一些事情:</p>
<ol>
<li>节点可能是返回列表中的旋钮,也可能不是。如果你知道你只需要旋钮,你可以按类类型过滤。我想这看起来像<code>nuke.allNodes(nuke.Knob)</code>。在</li>
<li>我不认为核弹旋钮旋钮(str)是对其名称或标签的测试。我在阅读文档时认为您的测试应该是:<code>if i.name != "tempMb":</code>或者可能是{<cd6>},这取决于您如何创建{<cd7>}。在</li>
</ol>
<p>尽管如此,我认为这里可能有一个逻辑错误。如果你有两个节点(如果你做了以上的改变,假设它们都是旋钮),当你循环所有节点时,第一个节点是<code>tempMb</code>,那么当你检查第二个节点时,它就不是这样了,你将尝试添加<code>t</code>,我假设它也被命名为<code>tempMb</code>。所以这就是为什么在你看来消极的情况总是发生。在</p>
<p>您需要通过以下两种方式之一进行重组:</p>
<ol>
<li>在循环之前,设置一个假布尔值,在循环中,当找到旋钮<code>tempMb</code>时,将其设置为true;您也可以在出现这种情况时立即退出循环。循环之后,检查布尔值,看看添加<code>t</code>是否安全。在</li>
<li>我看到一个可能的函数<a href="https://docs.thefoundry.co.uk/nuke/80/pythonreference/nuke-module.html#exists" rel="nofollow">^{<cd13>}</a>,它告诉您是否有任何名为<code>s</code>的“项”。在</li>
</ol>
<p>可能移除循环并写下以下内容:</p>
^{pr2}$