Re: [Pyobjc-dev] simple animation w/ NSTimer
Brought to you by:
ronaldoussoren
|
From: John B. <nho...@go...> - 2008-03-31 09:45:34
|
Hi Carl,
You don't pass in the function object when specifying Objective-C
methods, but a method "selector", which in Python land is just a
string (in Objective-C selectors have the type SEL, which may or may
not also be a string). Be careful to fully specify the selector by
including the colon for each argument e.g.
NSTimer
.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_
(1.0,self,'tick:',None,True)
Note that in the Python method definition the colon is replaced by an
underscore. So in Objective-C your 'tick' method would look like:
- (void)tick:(NSTimer*)timer
{
// Implemenation here
}
In Python this must be translated to:
def tick_(self, timer):
# implementation here
However the "selector" string must always use the Objective-C version
i.e. with the colon.
Regards,
John
____________________
Dr. John Buckley
nho...@gm...
www.olivetoast.com
Mac OS X Leopard
____________________
On 31 Mar 2008, at 00:03, Carl Bauer wrote:
> I'm a physics grad student (not a coder) wanting to put together a
> slick realtime physics simulation for my statistical mechanics
> class. (Simulating the 2D Ising model for ferromagnets in case
> anyone cares).
>
> Anyway, to start, I'm just trying to get a rectangle to change
> colors periodically. Why doesn't this work?
>
> import objc
> from Foundation import *
> from AppKit import *
> from PyObjCTools import NibClassBuilder, AppHelper
> from Quartz import NSColor
>
> NibClassBuilder.extractClasses("MainMenu")
>
> # class defined in MainMenu.nib
> class Lattice(NibClassBuilder.AutoBaseClass):
> # the actual base class is NSView
> color = NSColor.redColor()
> toggle = 0
> rect = NSMakeRect(40,40,40,40)
>
> def drawRect_(self,frameRect):
> NSEraseRect(self.rect)
> self.color.setFill()
> NSRectFill(self.rect)
>
> def start_(self, sender):
>
> self
> .timer
> =
> NSTimer
> .scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_
> (1.0,self,self.tick,None,True)
>
> def tick(self,timer):
> self.toggle = (self.toggle+1)%2
> if self.toggle:
> self.color = NSColor.blueColor()
> else:
> self.color = NSColor.redColor()
> self.display()
>
> if __name__ == "__main__":
> AppHelper.runEventLoop()
>
> The rectangle is drawn just fine at the beginning, but the timer
> doesn't seem to actually invoke drawRect_. I'm probably just not
> understanding how to properly use display()? Let me know if I'm
> being annoying and should just post to a different mailing list.
>
> Thanks,
> Carl
> -------------------------------------------------------------------------
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace_______________________________________________
> Pyobjc-dev mailing list
> Pyo...@li...
> https://lists.sourceforge.net/lists/listinfo/pyobjc-dev
|