将列表项添加到nuke.addCommand方法只需要其中一项?

时间:2017-01-22 19:36:26

标签: python-2.7 plugins operating-system nuke

我正在写一个可以放在例如meny.py文件在启动时将所有自定义插件/ gizmos / .nk文件加载到新菜单中。它应该与指定文件夹中的子目录一起使用,以创建子菜单以按类别对项目进行排序。 问题:它会创建菜单及其子菜单以及适当的项目,但是当项目的名称不同时,它们会在执行时创建完全相同的节点。我不知道那里发生了什么。

这是我到目前为止所做的:

import os

pluginpath = 'C:\Users\Workstation\.nuke\userplugins'
#print nuke.pluginPath()

customMenu = nuke.menu('Nodes').addMenu('UserPlugIns')

for dirpath, dirnames, filenames in os.walk ( pluginpath ):
    print ('')
    print ('CurrentPath: ' , dirpath)
    nuke.pluginAddPath(dirpath)
    dirname = os.path.split(dirpath)[-1]
    subMenu = customMenu.addMenu(dirname)
    #print ('Directories: ' , dirnames)
    #print ('Filenames: ' , filenames)
    for x in filenames:
        print x
        subMenu.addCommand(x, lambda: nuke.createNode('{}'.format(x)))

我想这是导致问题的最后一行。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

他们知道lambda的危险,所以你可能会开始使用部分

from functools import partial
....
....
........
        subMenu.addCommand(x, partial(nuke.createNode('{}'.format(x))))