Thanks alot fellas. The someList = getSomeList() was kind of were I was heading but wanted to make sure my logic is correct.
Cheers! On Jan 7, 11:24 pm, "Ofer Koren" <[email protected]> wrote: > Another way, somewhat similar to lambdas but without those 'buggy' > behaviours, is to use a 'callback' object: > class Callback: > def __init__(self,func,*args,**kwargs): > self.func = func > self.args = args > self.kwargs = kwargs > def __call__(self,*args, **kwargs): > return self.func(*self.args, **self.kwargs) > > def someDef(theList, someParameter): > .... > > cmds.button(command = Callback(someDef, someList, someParameter = 2)) > > (FYI - Pymel has a more robust version of this object which supports Undo: > from pymel import Callback) > > On Wed, Jan 7, 2009 at 7:44 PM, Matthew Chapman <[email protected]>wrote: > > > > > This is a common mistake, the way you have written this python will > > call 'someDef(someList)' and pass its results to named argument 'command'. > > There are a couple ways to get this to work the way you would like. My > > personal choice is this > > > # Define a function that can take any named or unnamed arguments > > # the * tells python to put any unnamed arguments into a list > > # the ** tell python to put any names arguments into a dictionary > > > def someDef( *args, **kwargs ): > > # call function or have inline code that creates someList > > someList = getSomeList() > > print someList > > > def buildUI(): > > # <insert all stuff that defines window> > > > # create button and pass the function it self to the argument > > # command=someDef() # will pass the result where as > > # command=someDef # passes the actual function to the argument > > >> cmds.button(command=someDef) > > > If you really want to pass in data in the call as its being defined > > you should use a lambda. A lambda is an unamed function. I have heard of > > lambdas being buggy in certain instances because of how they are defined and > > stored in memory in modules like pyqt. Here is how you could write is. > > > def buildUI(): > > # ' ' ' ' ' ' ' ' ' ' ' \/ > > >> cmds.button(command=lambda *args : someDef(someList )) > > > If you new the namespace of you function you could always pass it as a > > string to 'command'. > > > def buildUI(): > > # ' ' ' ' ' ' ' ' ' ' ' \/ > > >> cmds.button(command="myModule.someDef([%s] )" % str(someList)) > > -- > > - Oferwww.mrbroken.com --~--~---------~--~----~------------~-------~--~----~ Yours, Maya-Python Club Team. -~----------~----~----~----~------~----~------~--~---
