Wednesday, October 28, 2009

Japos Client

Durante este año he estado desarrollando aplicaciones multiplataforma para desktop como opentumblr, un system tray en windows para un proyecto privado y un punto de venta llamado JAPOS (Just Another Point Of Sale). JAPOS se divide en un backend desarrollado en django y en un frontend en wxpython.

Me entere por parte de Ricardo que Japos Client aparece en la seccion de proyectos destacados de codaset, en realidad no tengo ni idea que criterio usen pero por algo Japos Client fue considerado.

Tuesday, August 25, 2009

Hola Mundo

Es momento de crear el famoso “Hola Mundo”, considerando que ya se leyó los Primeros Pasos, después de crear el proyecto llamado HelloWorld debe aparecer una ventana como la de la imagen.



Creando la interfaz.

Se necesita abrir Interface Builder para esto dar doble click en MainMenu.xib, apareceran las 4 ventanas default. Posicionado sobre la ventana Library entrar en cocoa - views & cells - Inputs & values, ahi se encuentran 2 de los widgets a usar Label y Text Field. Para colocar los widgets basta con arrastrarlos a la ventana de la aplicación.




El tercer widget se encuentra en cocoa - views & cells - buttons y se usara el de Push Button, para cambiar la etiqueta por default que aparece en los widgets dando doble click sobre el mismo permite editarla. Ahora ya se tiene la apariencia definida de la aplicación como la de la imagen.



Ya para terminar con la interfaz solo falta definir el tamaño mínimo y máximo de la ventana de la aplicación, para esto abrir la ventana de Inspector(menu - tools - inspector) y dando click en el icono de regla se mostrara el área para definir las propiedades de la ventana de la aplicación.



Conectando Widgets

Para hacer la conexión entre widgets es necesario agregar un objeto (NSObject) ubicado en cocoa - objects & controllers - controllers sobre la ventana Library y arrastrarlo a la ventana del documento MainMenu.xib (English).



Ahora teniendo seleccionado el objeto (NSObject) en la ventana del documento, sobre la ventana de Inspector en la parte de Object Identify (es el penúltimo botón con una i dentro de un circulo) se deben ingresar algunos valores como: el nombre de la clase a identificar cuyo nombre sera HWController, las acciones (actions) en este caso es “view:” de tipo id, para los Outlet se define message de tipo NSTextField y por ultimo el identificador del objeto sera HWController, obteniendo algo como la imagen.



Aun sobre la ventana de Inspector pero ahora posicionado sobre Controllers Connections se muestran los Outlets y Actions creadas, ya solo es cuestión de ligarlas con su respectivo widget, entonces para ligar “view:” con el botón de saludar se debe dar click en el circulo que aparece del lado derecho y arrastrarlo hasta el botón, hacer algo similar para el TextField pero usando el Outlet.

Con eso estarán conectados los widgets y la interfaz terminada.



Generando HWController.py

Para esto primero se salva la interfaz y después ir a Menu - File - Write Class Files, se abrira un cuadro de dialogo para salvar el archivo que se va a generar y seleccionar python como lenguaje.



Ya que se genero el archivo python preguntara si debe ser agregado al proyecto.



Obteniendo algo como:



Dando funcionalidad a HWController.py

Como se uso un objeto tipo NSObject para conectar los widgets, es necesario indicarle a la class HWController que debe heredar de NSObject y en la actions “view:” escribir el codigo, obteniendo como resultado:

from Foundation import *
from AppKit import *
import objc

class HWController(NSObject):
message = objc.IBOutlet()

@objc.IBAction
def view_(self, sender):
print self.message.stringValue()


Para que funcione HWController.py y sea parte del proyecto, es necesario agregar la linea import HWController en el archivo main.py antes de import HelloWorldAppDelegate.

Ejecutando la aplicación

La funcion de la aplicacion es mostrar el mensaje escrito en el TextField al presionar el boton saludar, el mensaje aparece en la consola (Menu - Run - Console)

Via - Tutorial sobre aplicaciones nativas en OS X

Monday, August 24, 2009

Primero pasos

Antes de iniciar el desarrollo cocoa-python se requiere tener instalado pyobjc, python y xcode (utiliza python 2.5).

La instalación de pyobjc ya se comento en el anterior post, sobre python se pueden usar los macports para instalarlo y Xcode no tiene gran ciencia. Para este post se utilizo pyobjc 2.2b2, python 2.5 y Xcode 3.1.3 todos instalados en Leopard 10.5.8.

Crear nuevo proyecto.

Ejecutar xcode que se encuentra ubicado en /Developer/Applications/Xcode, es recomendable agregarlo al dock para mejor comodidad. Al crear un nuevo proyecto se debe seleccionar application y dentro de esa “seccion” Cocoa-Python Application  como se muestra la imagen.



Componentes de la ventana.

Una vez creado el proyecto, se abre una ventana que se divide en 4 partes. En la parte superior se encuentra la barrar de herramientas bastante intuitiva.

Del lado izquierdo se encuentra el área de grupos y archivos.

Básicamente contiene todos los componentes que integran el proyecto que a la vez  presionando botón derecho del mouse permite agregar más.


La lista de archivos del proyecto se encuentra en la parte superior derecha, aparecen todos los archivos, frameworks del proyecto por grupo.



De ese mismo lado pero en la parte inferior se encuentra el editor.



Interface Builder

En el listado de archivos se puede ver MainMenu.xib veamos a este archivo como el paquete que contiene los recursos del GUI, al dar doble click se abrirá Interfaz Builder si, el diseñador del GUI.

Las ventanas que se abren por default son:

  • Library - Contiene los widgets y objetos que pueden ser agregados a la aplicación con solo arrastrar y soltar.

  • Ventana de la aplicacion - Es el lugar donde se colocan los widgets.

  • Menu - muestra el resultado del menú de la aplicación.


  • Ventana del documento  - muestra el contenido de MainMenu.xib, se pueden agregar mas objetos arrastrándolos desde ventana de Library.

Via - Cocoa Dev Central

Sunday, August 23, 2009

Introducción a Pyobjc

Este fin de semana estuve buscando información sobre desarrollo con cocoa y python usando como binding pyobjc. Pyobjc se usa como puente entre Python y Objetive-C, de esta manera se pueden usar  los modulos de python y a la vez generar un GUI bastante bonito.

Existe información en internet donde comentan como instalar pyobjc usando los macports pero hasta el día de hoy el servidor svn que aloja el proyecto no funciona, dejando obsoleta la opción de los macports. Otra alternativa es descargarlo  desde pypi.

python setup.py install
import objc


Cuestiones a considerar.

Puesto que pyobjc crea una liga entre Python y Objetive-C, se debe tener en cuenta que los (:) usados por Objetive-C se sustiyen por (_) en python, ademas de considerar:

Las variables mejor conocidas como Outlets se deben definir como variables de la clase por ejemplo:

mivariable = objc.IBOulet()


Para poder ligar las acciones (Actions) que se establecen en el GUI con las funciones escritas en python de debe anteponer @objc.IBAction.

@objc.IBAction
def pushbutton_(self, sender):


Por ultimo, se encuentran los Colons. Los Colons son metodos/funciones traducidos a python. En el caso de Objetive-C se usan:

-(int) show: (int) evento and (int) panel;


Traduciéndolo a código en Python

@objc.IBAction
def show_and_(self, evento, panel):


Importante no se debe usar “_” como unión de 2 palabras en el nombre del método para identificar a simple vista la función que desempeña, por ejemplo si dicho método muestra un saludo entonces se podría llamar

@objc.IBAction
def showSalute_(self, evento, panel):



Via - Lethain.com, Scottr.org

Friday, August 21, 2009

Building Cocoa GUIs in Python with PyObjC

Source - Scottr