If语句在fals时执行

2024-10-02 08:15:17 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图添加一个旋钮时,我得到“旋钮已经连接到一个节点”

当我试图从菜单.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 U旋钮。。。在

谢谢!在


Tags: py脚本messageif节点菜单编辑器按钮
3条回答

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

有关Nuke forum的详细信息。在

另请参见Documentation on nuke.exists

尝试以下解决方案:

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

enter image description here

首先,我将把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时,似乎会发生一些事情:

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

尽管如此,我认为这里可能有一个逻辑错误。如果你有两个节点(如果你做了以上的改变,假设它们都是旋钮),当你循环所有节点时,第一个节点是tempMb,那么当你检查第二个节点时,它就不是这样了,你将尝试添加t,我假设它也被命名为tempMb。所以这就是为什么在你看来消极的情况总是发生。在

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

  1. 在循环之前,设置一个假布尔值,在循环中,当找到旋钮tempMb时,将其设置为true;您也可以在出现这种情况时立即退出循环。循环之后,检查布尔值,看看添加t是否安全。在
  2. 我看到一个可能的函数^{},它告诉您是否有任何名为s的“项”。在

可能移除循环并写下以下内容:

^{pr2}$

相关问题 更多 >

    热门问题