如果语句执行时,它的假
我得到“旋钮已经连接到一个节点”当我尝试添加一个旋钮如果语句执行时,它的假
我得到这个当我尝试从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 .. 。
谢谢!
首先,我要将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)
不使用该名称检查旋钮的存在,或者您的代码将表现为预期的要多。所以当我读the docs它似乎可能会发生几件事:
- 节点可能或可能不是在返回列表中的旋钮。如果你知道你只需要旋钮,你可以按类的类型进行过滤。我认为这可能看起来像
nuke.allNodes(nuke.Knob)
。 - 我不认为nuke.Knob.knob(str)是它的名字或标签的测试。我阅读文档意味着您的测试应该是:
if i.name != "tempMb":
或可能if i.label != "tempMb"
这取决于您如何创建t
。
但是,我认为这里可能有一个逻辑错误。如果你有2个节点(如果你做了上述改变,让我们假设它们都是旋钮),并且当你遍历所有节点时,第一个节点是tempMb
,那么当你检查第二个节点时,它不会是那个你会尝试添加t
,我假设它也被命名为tempMb
。所以这就是为什么它看起来好像总是出现负面情况。
您需要在以下两种方式之一进行重组:
- 循环之前,设置一个假布尔,在循环播放设置为true,当旋钮
tempMb
被发现;一旦发生这种情况,您可以立即退出环路。循环后检查布尔值,看看是否可以安全地添加t
。 - 我看到一个可能的函数
nuke.exists(s)
,它告诉你是否有任何名为s
的“item”。
也许消除环路和写:如果你的旋钮存在
if not nuke.exists("tempMb"):
# Add your knob. I'm actually not seeing `addKnob` in the docs.
你会如何检查是否有旋钮?因为“如果不是i.knob(”tempMb“):”在这种情况下不起作用 编辑:我试图找到一些关于这个API的信息..虽然找不到任何东西... – masky007
@ masky007阅读我的点1和2,然后按照链接到文档,如果你认为我在正确的轨道上(并且很难告诉我没有看到什么时候创建't'或任何其他节点或旋钮),然后尝试那些建议。我希望他们帮助。 – dlamblin
@ masky007我增加了更多,因此以前的评论指的是第一点1和第2点。但我认为真正的问题是移动中的逻辑问题。对于每个不是'tempMb'的节点,你都加上't'。这听起来不像你想要做的。 – dlamblin
出示您的[MCVE。 –
您可以在[The Foundry的NUKE Python论坛]上找到更好的答案(http://community.thefoundry.co.uk/discussion/forum.aspx?f=190)。 – Matt