I sent this just to Craig, but figured I should probably send to the group in retrospect - at least this way something'll be online in the pythonmac-sig archives...

Below my signature is a sample script demonstrating a really minimal use of pyobjc. This is meant to be run from the command line, and uses the BTop2 framework from Perfectly Scientific. You can download that framework for free, but it won't do much if you don't have the hardware!

Not exactly a tutorial, but darned simple for sure... I can't remember if that __getattr__ thing ever worked... I don't think it did. The Exception thing is _way_ useful (as indicated in the comments there). The standard exception messages you'll get while using pyobjc are close to useless.

I'll add also that I'd not be averse to chipping in to a non-Xcode pyobjc tutorial online somewhere. I'm not terribly self-motivated on that, but would do if someone asked for more.

Cheers,
Dav
--
Statistical Motion R&D
http://socrates.berkeley.edu/~ivrylab/

import objc

# # Way useful for debugging
# import PyObjCTools.Debugging as Debugging
# Debugging.installVerboseExceptionHandler()

btop_path = objc.pathForFramework('/Users/dav/Code/bTop.framework')
objc.loadBundle('btop', globals(), bundle_path=btop_path)
# Not sure why I need to do this... I shouldn't!
BTopBoard.setBTopFirmwareDirectory_(btop_path + '/Versions/A/Resources')

class BoardContainer(NSObject):
    """BoardContainer should be initialized by BoardControl below"""
    board = None

    def bTopAddBoard_(self, board):
        self.board = board
        self.board.setPortBit_direction_('B', 255)
        self.board.refreshDigitalPortValues()

    def send(self, val):
        self.board.setPortBit_value_('B', 255-val)
        self.board.refreshDigitalPortValues()

class BoardControl:
"""Instantiate the BoardContainer and provide a more pythonic interface

    Ultimately, this should implement a standard Parallel Port API"""
    board = None

    def __init__(self):
        # Cocoa objects are constructed differently...
        self.board = BoardContainer.alloc().init()
        BTopBoard.setBTopPrimaryObserver_(self.board)
        BTopBoard.allocBTopObserver()

# # try writing a function dispatch to catch undeclared funcs... see
    # # what's going on!
    # def __getattr__(self, name):
    #     def handler(*args, **kwargs):
    #         print '*name*', name
    #         print '*args*', args
    #         print '*kwargs*', kwargs
    #     return handler

    def send(self, val):
        self.board.send(val)



_______________________________________________
Pythonmac-SIG maillist  -  Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig

Reply via email to