-1

所以为了简单起见,我在 NUKE 中编写了一个脚本,它将节点图中的选定节点对齐到 Y 轴上的一条直线上。我在编写elif语句时遇到问题,该语句要么没有按我想要的方式运行,要么给我一个语法错误。

所以函数的基础是:

ELSE STATEMENT- 当只选择一个节点时 - 弹出错误消息说用户必须选择多个节点

ELIF STATEMENT- 选择两个或多个在相同y轴的节点 - 消息显示它们已经对齐

IF STATEMENT- 当在不同的y轴中选择两个或多个节点时 - 它应正确对齐直线中的所有节点

# Getting selected nodes and making them into a list

selNodes = nuke.selectedNodes()
list = []

for node in selNodes:
            n = node['ypos'].value()
            list.append(n)

# Defining the actual function

def alignY():

    # Aligning the selected nodes using average position of every node. 
    # Must select more than one node in order to get an average.

    if len(selNodes) > 1:

        total = sum(list)
        average = total / len(selNodes)

        for node in selNodes:
            n = node['ypos'].setValue(average)

    # Getting the position of a single node from the list
    firstNodePostion = list[0]

    # Checking position of the single node is equivalent to the average 
    # To prevent nodes aligning again)  

    elif average == firstNodePostion:
        nuke.message("Nodes already Aligned")

    # When no nodes or only one node is selected this message pops up         
    else:
        nuke.message("Select Two or more Nodes")

alignY()
4

2 回答 2

1

您必须根据 Python 规则缩进代码行。

所以你需要在每个缩进级别使用 4 个空格——查看PEP 8

import nuke

selNodes = nuke.selectedNodes()
list = []

for node in selNodes:
    n = node['ypos'].value()
    list.append(n)

def alignY():

    if len(selNodes) > 1:
        total = sum(list)
        average = total / len(selNodes)

        for node in selNodes:
            n = node['ypos'].setValue(average)
            firstNodePostion = list[0]

    elif average == firstNodePostion:
        nuke.message("Nodes already Aligned")

    else:
        nuke.message("Select Two or more Nodes")

alignY()

在此处输入图像描述

现在alignY()方法按预期工作。

在此处输入图像描述

于 2019-09-19T12:48:32.427 回答
0

您的问题是您有一个位于 if 和 elif 之间的语句,这可能会导致语法错误。

虽然很难说,因为您没有提供确切的错误消息,但从句法的角度来看,不应该有另一个语句将 if 和 elif 分开。

于 2019-08-29T18:47:51.830 回答