繁体   English   中英

if 语句为 false 时执行

[英]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)不检查该名称的旋钮是否存在,否则您的代码会表现得更像您预期的那样。 因此,当我阅读文档时,似乎可能会发生一些事情:

  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.

试试这个解决方案:

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")

在此处输入图片说明

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

更多详情请访问Nuke 论坛

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM