could you comment then possible threats of writting gui like in the code below. it's best example i could give when function pointers work much better than global handlers. first class is a helper that builds a gui to select a node into gui, and provides handler methods for it's own buttons, second one runs multiple instances of it. how would this code would look like with global handler versions? i imagine, not very pretty.
CODE
import maya.cmds as cmds
# class that builds a node selection row with "select this" and "clear selection" buttons
class NodeSelectRow:
def __init__(self,title,parent):
row = cmds.rowLayout(parent=parent,nc=4, adjustableColumn=2,columnWidth4=[100,200,40,20], columnAttach4=["both","both","both","both"],columnAlign4=["left","left","center","center"])
cmds.text(label=title)
self.nameField = cmds.nameField(parent=row)
select = cmds.button(label="<<",command=self.setSelectedNode,align="center",annotation='set selected node')
select = cmds.button(label="X",command=self.clearNode,align="center",annotation='clear selection')
self.clearNode()
def getNode(self):
return cmds.nameField(self.nameField,q=True,object=True)
def setNode(self,node):
cmds.nameField(self.nameField,e=True,object=node,annotation=node)
def setSelectedNode(self,*args):
self.setNode(cmds.ls(sl=True)[0])
def clearNode(self,*args):
self.setNode('')
pass
class InstancedGuiTest:
def printSelectedNodes(self,*args):
print self.selectNode1.getNode()
print self.selectNode2.getNode()
print self.selectNode3.getNode()
print self.selectOneMoreNode.getNode()
def show(self):
cmds.window( width=150 )
layout = cmds.columnLayout( adjustableColumn=True )
self.selectNode1 = NodeSelectRow('First Node: ',layout)
self.selectNode2 = NodeSelectRow('Second Node: ',layout)
self.selectNode3 = NodeSelectRow('Third Node: ',layout)
self.selectOneMoreNode = NodeSelectRow('Another Node: ',layout)
cmds.setParent(layout)
cmds.button('Print Selected Stuff',command=self.printSelectedNodes)
cmds.showWindow()
test = InstancedGuiTest()
test.show()