为Nuke中的列表中的每个项创建一个复选框

时间:2018-03-14 21:22:59

标签: python checkbox nuke

这是我的问题: 我想为所选的每个节点创建一个CheckBox。 我已经设法为每个节点创建了具有正确名称的CheckBox,但问题是在复选框中选中它们并打印结果只返回选择的第一个节点或者一个bolean答案(True或False),no重要的是选中了什么复选框。我无法找到答案。 谢谢你的一切!

import nuke


nodeNames = [n.name() for n in nuke.allNodes('Write')]

names = []
for s in nuke.allNodes('Write'):
    n = s['name'].value()
    names.append(n)
#print names
#len(names)

writeNodes = ( ", ".join( str(e) for e in names ) )


p = nuke.Panel ('TEST')

for items in names:
    de = p.addBooleanCheckBox(items,'True')    

p.show()

1 个答案:

答案 0 :(得分:2)

如果要从面板返回信息,则需要创建自己的PythonPanel子类。像这样:

class WritesPanel( nukescripts.PythonPanel ):
    def __init__( self , nodeNames):
        nukescripts.PythonPanel.__init__( self, "Write Nodes", "unique.panel.id" )

        self.nodeNames=nodeNames

        for nodeName in nodeNames:
            self.k = nuke.Boolean_Knob(nodeName, nodeName)

            self.addKnob( self.k )

    # The next function shows the dialog as a modal dialog. Doing this 
    # automatically adds the 'OK' and 'Cancel' buttons to the dialog.

    def showModalDialog( self ):
        result = nukescripts.PythonPanel.showModalDialog( self )
        if result:
            results={}
            for nodeName in self.nodeNames:
                results[nodeName]=self.knobs()[nodeName].value()
            return results
        else:
            return None

# The following function calls WritesPanel

def launchWritesPanel(nodeNames):
    return WritesPanel(nodeNames).showModalDialog()

使用您的nodeNames列表调用launchWritesPanel,如果用户按下OK,面板将返回{nodeName:True/False}字典,如果用户取消,则返回None