[英]If statement executes when it's false
当我尝试添加旋钮时,我收到“旋钮已连接到节点”
当我尝试从 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)
不检查该名称的旋钮是否存在,否则您的代码会表现得更像您预期的那样。 因此,当我阅读文档时,似乎可能会发生一些事情:
nuke.allNodes(nuke.Knob)
。if i.name != "tempMb":
或者if i.label != "tempMb"
这取决于您如何创建t
。 尽管如此,我认为这里可能存在逻辑错误。 如果您有 2 个节点(并且如果您进行了上述更改,我们假设它们都是旋钮),并且当您遍历所有节点时,第一个节点是tempMb
,那么当您检查第二个节点时,它不会是那个你会尝试添加t
,我假设它也被命名为tempMb
。 所以这就是为什么在你看来,负面情况似乎总是在发生。
您需要通过以下两种方式之一进行重组:
tempMb
时将其设置为 true; 一旦发生这种情况,您最好立即退出循环。 在循环之后检查布尔值以查看添加t
是否安全。nuke.exists(s)
它告诉你是否有任何名为s
“项目”。也许删除循环并编写以下内容:
if not nuke.exists("tempMb"):
# Add your knob. I'm actually not seeing `addKnob` in the docs.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.