That is the correct way to do it. Maya is passing a positional argument to the callback, which is why you need a spot for it in the method def.
-Chris On Wed, Jun 10, 2009 at 5:38 PM, Sylvain Berger <[email protected]>wrote: > yeah I know, I would like to be able to do it without pymel if possible. > I want to keep my options open so that I don't always have to rely on a 3rd > party module to do things. > > I kinda found a stupid workaround...basically I need to add one dummy > argument to the function I call with partial... not elegent but it works > > > On Wed, Jun 10, 2009 at 5:23 PM, Ofer Koren <[email protected]> wrote: > >> >> pymel has Callback object class that works well for this purpose. >> It works like partial except that it'll ignore any incoming args/kwargs >> that >> are passed when the callback is invoked: >> >> >> cb = pm.Callback(myFunc, arg1=1) >> cb("args", dont='matter') >> >> >> import pymel as pm >> pm.button(l="Test button", c=pm.Callback(myFunc, 1, 2, arg1="a", >> arg2="b")) >> >> >> >> >> >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]] On Behalf Of sberger >> Sent: Wednesday, June 10, 2009 1:25 PM >> To: python_inside_maya >> Subject: [Maya-Python] Re: using partial in window classes >> >> >> please note that the example I sent are reversed... the first one is >> the keywords example, and the second one the non keywords example >> >> >> >> On Jun 10, 4:10 pm, sberger <[email protected]> wrote: >> > Hi guys, I found this trick for Maya. When you create a window class, >> > I can use the partial function to build my commands sent to my >> > buttons. >> > >> > The problem is I can only manage to make this work with one arguments, >> > when I send 2 or more arguments i get errors. >> > >> > Here is the code: >> > >> > from functools import partial >> > import maya.cmds as cmds >> > class ButtonWin(object): >> > def __init__(self): >> > window='testWin' >> > if (cmds.window(window, exists=True)): >> > cmds.deleteUI(window, window=True) >> > self.win = cmds.window(window) >> > self.layout = cmds.columnLayout(parent=self.win) >> > for x in range(10): >> > partialFunc = >> partial(self.report,buttonIndex=x,value=x*2) >> > print 'function:', partialFunc.func >> > print 'args:', partialFunc.args >> > print 'keywords:', partialFunc.keywords >> > cmds.button(label="Click Here %d"%x, >> parent=self.layout, >> > command=partialFunc) >> > cmds.showWindow() >> > def report(self,buttonIndex=0,value=0): >> > print "button %d got %s"%(buttonIndex,value) >> > f = ButtonWin() >> > >> > I have tried using keywords arguments but I still get an error: >> > from functools import partial >> > import maya.cmds as cmds >> > class ButtonWin(object): >> > def __init__(self): >> > window='testWin' >> > if (cmds.window(window, exists=True)): >> > cmds.deleteUI(window, window=True) >> > self.win = cmds.window(window) >> > self.layout = cmds.columnLayout(parent=self.win) >> > for x in range(10): >> > partialFunc = partial(self.report,x,x*2) >> > print 'function:', partialFunc.func >> > print 'args:', partialFunc.args >> > print 'keywords:', partialFunc.keywords >> > cmds.button(label="Click Here %d"%x, >> parent=self.layout, >> > command=partialFunc) >> > cmds.showWindow() >> > def report(self,buttonIndex,value): >> > print "button %d got %s"%(buttonIndex,value) >> > f = ButtonWin() >> > >> > Anyone have experience using this partial function? >> > >> > Thanks >> >> >> >> > > > -- > They say, "Evil prevails when good men fail to act." What they ought to say > is, "Evil prevails." > Nicolas Cage as Yuri Orlov in Lord of War. > > > > --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/python_inside_maya -~----------~----~----~----~------~----~------~--~---
