[Pythonmac-SIG] Porting a Tkinter application to Cocoa: question about datatypes

Ronald Oussoren ronaldoussoren at mac.com
Thu Jun 14 03:39:03 CEST 2007


On 13 Jun, 2007, at 17:33, Kevin Walzer wrote:

> Ronald Oussoren wrote:
>
>> The major exception to this is Key-Value Observing (also known as  
>> Cocoa bindings).  Cocoa bindings requires that objects emit events  
>> when they are mutated (append an item, set the value for a key in  
>> a dict, ...). Sadly enough Python doesn't have the hooks that are  
>> required to emit these events for pure python objects.  Adding  
>> this support requires some low-level changes to python and I'm not  
>> sure if this can be done without adversely affecting the  
>> performance of the interpreter.
>
> Interesting. Are Cocoa bindings analogous to the updating and  
> binding mechanism in Tk? For instance, in Tkinter, I can assign a  
> value to an object, then update that value later in another  
> function via the StringVar() mechanism. For instance, in in my  
> self.drawGUI function, I can do this:
>
>         self.status = StringVar()
>         self.status.set('Ready')
>
> then in another function, I can call this:
>
>         self.status.set('Process terminated')
>
> and the value of the label widget will be updated. Was this  
> functionality hard to manage or missing in Objective-C/Cocoa before  
> the "Cocoa Binding" stuff was added?

That seems to be simular to Cocoa Bindings, except that arbitrary  
objects can participate in Cocoa Bindings/KVO. You basicly have to  
implement an interface for getting and setting attributes (simular to  
getattr/setattr in Python) and you have to emit events when changing  
attributes, which is done automaticly by the __setattr__  
implementation for NSObject. The framework does the legwork for  
actually routing the events and making sure that this is done as  
efficiently as possible.

Bindings are explained here: <http://developer.apple.com/ 
documentation/Cocoa/Conceptual/CocoaBindings/index.html?http:// 
developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/ 
CocoaBindings.html>

Bindings are really powerfull when used in NIB files (basically GUI  
design files), you can connect controls to data in your model  
entirely in the GUI builder tool without writing a single line of  
code. There is a risk for creating greatly obfuscated programs,  
because important parts of your program aren't actually in code.

Ronald

>
> -- 
> Kevin Walzer
> Code by Kevin
> http://www.codebykevin.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3562 bytes
Desc: not available
Url : http://mail.python.org/pipermail/pythonmac-sig/attachments/20070613/67137a58/attachment.bin 


More information about the Pythonmac-SIG mailing list