<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Programación</title>
	<atom:link href="http://pymanimal.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pymanimal.wordpress.com</link>
	<description>Sitio dedicado a las técnologias Java, Android, Pyton, WxPyton, Django y MySql</description>
	<lastBuildDate>Mon, 12 Dec 2011 21:56:25 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='pymanimal.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Programación</title>
		<link>http://pymanimal.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://pymanimal.wordpress.com/osd.xml" title="Programación" />
	<atom:link rel='hub' href='http://pymanimal.wordpress.com/?pushpress=hub'/>
		<item>
		<title>SurfaceView</title>
		<link>http://pymanimal.wordpress.com/2011/08/22/surfaceview-1ra-parte/</link>
		<comments>http://pymanimal.wordpress.com/2011/08/22/surfaceview-1ra-parte/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 20:12:28 +0000</pubDate>
		<dc:creator>dan5sanf</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://pymanimal.wordpress.com/?p=306</guid>
		<description><![CDATA[La clase SurfaceView se usa en juegos que necesitan un nivel bastante alto de potencia a la hora de repintar la pantalla. En el siguiente ejemplo se muestra una imagen a través de SurfaceView public class Game extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new GameView(this)); } } public class GameView extends <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=306&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://pymanimal.files.wordpress.com/2011/07/android-logo2.png"><img src="http://pymanimal.files.wordpress.com/2011/07/android-logo2.png?w=300&#038;h=111" alt="" title="android-logo" width="300" height="111" class="aligncenter size-medium wp-image-286" /></a><br />
La clase SurfaceView se usa en juegos que necesitan un nivel bastante alto de potencia a la hora de repintar la pantalla.</p>
<p>En el siguiente ejemplo se muestra una imagen a través de SurfaceView</p>
<pre><code>
public class Game extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new GameView(this));
    }
}

public class GameView extends SurfaceView implements SurfaceHolder.Callback {

	private Bitmap bmp;
	private int width, height;
	private SurfaceHolder holder;

	public GameView(Context context) {
		super(context);
		getHolder().addCallback(this);
		bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		this.width = width;
		this.height = height;
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		Canvas c = holder.lockCanvas(null);
		onDraw(c);
		holder.unlockCanvasAndPost(c);
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {

	}

	@Override
	public void onDraw(Canvas canvas) {
		canvas.drawColor(Color.BLACK);
		canvas.drawBitmap(bmp, 10, 10, null);
	}

}
</code></pre>
<p>Se crea una clase que herede SurfaceView e implemente SurfaceHolder.callback para usar los métodos de esta última interfaz:</p>
<pre><code>
public class GameView extends SurfaceView implements SurfaceHolder.Callback {
</code></pre>
<p>No se puede manejar directamente el objeto Surface, se debe hacer a través de un SurfaceHolder (un contenedor) que se consigue llamando en el constructor de la clase a getHolder() e indicar que SurfaceHolder va a recibir las llamadas del SurfaceHolder.callback:</p>
<pre><code>
getHolder().addCallback(this);
</code></pre>
<p>Las siguiente tres funciones son propias del interfaz SurfaceHolder.Callback y se llaman en caso de que cambie el tamaño de la pantalla (por ejemplo al girar el teléfono), al crear la View y cuando se cierra. </p>
<p>La primera actualiza los atributos de ancho y alto de la pantalla</p>
<pre><code>
@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		this.width = width;
		this.height = height;
	}
</code></pre>
<p>La segunda crea la View:</p>
<pre><code>
@Override
	public void surfaceCreated(SurfaceHolder holder) {
		Canvas c = holder.lockCanvas(null);
		onDraw(c);
		holder.unlockCanvasAndPost(c);
	}
</code></pre>
<p>La tercera se usa para cerrar la pantalla:</p>
<pre><code>
@Override
	public void surfaceDestroyed(SurfaceHolder holder) {

	}
</code></pre>
<p>Sobrescribimos el método onDraw() para que dibuje la imagen en la pantalla:</p>
<pre><code>
@Override
	public void onDraw(Canvas canvas) {
		canvas.drawColor(Color.BLACK);
		canvas.drawBitmap(bmp, 10, 10, null);
	}
</code></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pymanimal.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pymanimal.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pymanimal.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pymanimal.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pymanimal.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pymanimal.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pymanimal.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pymanimal.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pymanimal.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pymanimal.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pymanimal.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pymanimal.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pymanimal.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pymanimal.wordpress.com/306/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=306&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pymanimal.wordpress.com/2011/08/22/surfaceview-1ra-parte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b4f759fd18b2c3efdab440fdc599583?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dan5sanf</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2011/07/android-logo2.png?w=300" medium="image">
			<media:title type="html">android-logo</media:title>
		</media:content>
	</item>
		<item>
		<title>Imagen y Gráficos</title>
		<link>http://pymanimal.wordpress.com/2011/07/29/imagen-y-graficos/</link>
		<comments>http://pymanimal.wordpress.com/2011/07/29/imagen-y-graficos/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 18:30:23 +0000</pubDate>
		<dc:creator>dan5sanf</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://pymanimal.wordpress.com/?p=288</guid>
		<description><![CDATA[En Android la pantalla está ocupada por una actividad que cuenta con una vista que contiene un lienzo. Usted tiene la oportunidad de aprovechar el lienzo sobrescribiendo el método View.onDraw() . El único parámetro para onDraw() es un lienzo en el que se pueda dibujar. Esta es una forma de mostrar una imagen y dibujar <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=288&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://pymanimal.files.wordpress.com/2011/07/android-logo2.png"><img src="http://pymanimal.files.wordpress.com/2011/07/android-logo2.png?w=300&#038;h=111" alt="" title="android-logo" width="300" height="111" class="aligncenter size-medium wp-image-286" /></a><br />
En Android la pantalla está ocupada por una actividad que cuenta con una vista que contiene un lienzo. Usted tiene la oportunidad de aprovechar el lienzo sobrescribiendo el método View.onDraw() . El único parámetro para onDraw() es un lienzo en el que se pueda dibujar.<br />
Esta es una forma de mostrar una imagen y dibujar gráficos en la pantalla.</p>
<pre><code>
public class Graphics extends Activity {
	/** LLama a la actividad una vez creada. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(new GraphicsView(this));

	}

public class GraphicsView extends View {

	private Paint paint;
	private Bitmap mBitmap;

	public GraphicsView(Context context) {
		super(context);

		mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

	}

	@Override
	protected void onDraw(Canvas canvas) {

		paint = new Paint();
		paint.setColor(Color.GREEN);
		int x = (getWidth() / 2) - (mBitmap.getWidth() / 2);
		int y = (getHeight() / 2) - (mBitmap.getHeight() / 2);

		canvas.drawLine(40, getHeight() / 2, getWidth() - 40, getHeight() / 2,
				paint);

		paint.setColor(Color.LTGRAY);
		canvas.drawCircle(getWidth() / 2, getHeight() / 2, 40, paint);

		canvas.drawBitmap(mBitmap, x, y, null);

		paint.setStyle(Paint.Style.STROKE);
		paint.setColor(Color.BLUE);
		canvas.drawCircle(getWidth() / 2, getHeight() / 2, 100, paint);

		Rect rect1 = new Rect(40, 40, 100, getHeight() / 2 - 20);

		Rect rect2 = new Rect(getWidth() - 40 - 60, getHeight() / 2 + 20,
				getWidth() - 40, getHeight() - 40);

		paint.setColor(Color.MAGENTA);
		canvas.drawRect(rect1, paint);
		canvas.drawRect(rect2, paint);

	}

</code></pre>
<p>En la Activity Graphics, setContentView() toma como parámetro un objeto de la clase GraphicsView.</p>
<pre><code>
setContentView(new GraphicsView(this));
</code></pre>
<p>En la clase GraphicView sobrescribimos el método onDraw() con un Cambas como argumento.</p>
<pre><code>
@Override
	protected void onDraw(Canvas canvas) { }
</code></pre>
<p>Un Cambas es un lienzo que nos permite dibujar figuras o una imagen.<br />
Para dibujar el Cambas toma generalmente como parámetros las coordenadas x, y más un objeto de la clase Paint. La clase Paint mantiene el estilo, color y otra información necesaria para dibujar  gráficos como mapa de bits (bitmap), texto y figuras geométricas.</p>
<p>A modo de prueba en vez de usar para las coordenadas x, y valores enteros le paso valores fraccionarios del ancho y el alto para mantener la composición dentro de la pantalla  tanto en la posición vertical como horizontal.</p>
<p>Se crea un objeto de la clase Paint para pasarle al Canvas.</p>
<pre><code>
private Paint paint;
paint = new Paint();
paint.setColor(Color.GREEN);
</code></pre>
<p>Para dibujar una línea se toma los valores de las coordenadas del punto inicial  y del punto final de la recta más un objeto Paint.</p>
<pre><code>
canvas.drawLine(40, getHeight() / 2, getWidth() - 40, getHeight() / 2,
				paint);
</code></pre>
<p>Para dibujar un circulo los valores de las coordenadas x, y representan el centro, después el valor del radio y un objeto Paint, por defecto el circulo se dibuja relleno.</p>
<pre><code>
paint.setColor(Color.LTGRAY);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, 40, paint);
</code></pre>
<p>Para mostrar una imagen primero se crea un campo del tipo Bitmap, se inicializa en el constructor de la clase y luego se dibuja con el Canvas.</p>
<pre><code>
private Bitmap mBitmap;
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
canvas.drawBitmap(mBitmap, x, y, null);
</code></pre>
<p>Con esto cambio el estilo del objeto Paint para que la figura no sea rellena.</p>
<pre><code>
paint.setStyle(Paint.Style.STROKE);
</code></pre>
<p>Con setColor() se establece el color del objeto Paint.</p>
<pre><code>
paint.setColor(Color.BLUE);
</code></pre>
<p>Para dibujar un rectángulo primero se crea un objeto Rect para usarlo en el Canvas.<br />
Los valores x, y son la esquina superior derecha y el otros par de valores x&#8217;, y&#8217; son la esquina inferior izquierda.</p>
<pre><code>
Rect rect1 = new Rect(40, 40, 100, getHeight() / 2 – 20);
</code></pre>
<p>Después se llama a canvas.drawRect() con los objetos Rect y  Paint  como argumento.</p>
<pre><code>
canvas.drawRect(rect1, paint);
</code></pre>
<p><a href="http://pymanimal.files.wordpress.com/2011/07/5554emulador_2-31.png"><img src="http://pymanimal.files.wordpress.com/2011/07/5554emulador_2-31.png?w=500&#038;h=202" alt="" title="5554:Emulador_2.3" width="500" height="202" class="aligncenter size-medium wp-image-298" /></a><br />
<a href="http://pymanimal.files.wordpress.com/2011/07/5554emulador_2-21.png"><img src="http://pymanimal.files.wordpress.com/2011/07/5554emulador_2-21.png?w=500&#038;h=281" alt="" title="5554:Emulador_2.2" width="500" height="281" class="aligncenter size-medium wp-image-300" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pymanimal.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pymanimal.wordpress.com/288/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pymanimal.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pymanimal.wordpress.com/288/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pymanimal.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pymanimal.wordpress.com/288/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pymanimal.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pymanimal.wordpress.com/288/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pymanimal.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pymanimal.wordpress.com/288/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pymanimal.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pymanimal.wordpress.com/288/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pymanimal.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pymanimal.wordpress.com/288/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=288&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pymanimal.wordpress.com/2011/07/29/imagen-y-graficos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b4f759fd18b2c3efdab440fdc599583?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dan5sanf</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2011/07/android-logo2.png?w=300" medium="image">
			<media:title type="html">android-logo</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2011/07/5554emulador_2-31.png?w=500" medium="image">
			<media:title type="html">5554:Emulador_2.3</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2011/07/5554emulador_2-21.png?w=500" medium="image">
			<media:title type="html">5554:Emulador_2.2</media:title>
		</media:content>
	</item>
		<item>
		<title>Mostrar Imágen</title>
		<link>http://pymanimal.wordpress.com/2011/07/08/procesamiento-de-imagenes/</link>
		<comments>http://pymanimal.wordpress.com/2011/07/08/procesamiento-de-imagenes/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 10:36:30 +0000</pubDate>
		<dc:creator>dan5sanf</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://pymanimal.wordpress.com/?p=264</guid>
		<description><![CDATA[Interesado en el desarrollo de juegos en Android empecé a estudiar esta plataforma. Para programar en Android es necesario instalar Java, android-sdk y Eclipse, si no sabes como hacerlo podes recurrir a la documentación oficial, también aquí hay un video en español que lo explica muy bien como hacerlo. Empecé a leer sobre como dibujar <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=264&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://pymanimal.files.wordpress.com/2011/07/android-logo2.png"><img src="http://pymanimal.files.wordpress.com/2011/07/android-logo2.png?w=300&#038;h=111" alt="" title="android-logo" width="300" height="111" class="aligncenter size-medium wp-image-286" /></a>Interesado en el desarrollo de juegos en <a href="http://code.google.com/intl/es/android/" title="Descripción de Android">Android</a> empecé a estudiar esta plataforma.<br />
Para programar en <a href="http://code.google.com/intl/es/android/" title="Descripción de Android">Android</a> es necesario instalar <a href="http://es.wikipedia.org/wiki/Java_%28lenguaje_de_programaci%C3%B3n%29" title="Descripción de Java" target="_blank">Java</a>, <a href="http://developer.android.com/sdk/index.html" title="Instalar android-sdk" target="_blank">android-sdk</a> y <a href="http://es.wikipedia.org/wiki/Eclipse" title="Descripción de Eclipse" target="_blank">Eclipse</a>, si no sabes como hacerlo podes recurrir a la documentación oficial, también <a href="http://www.edu4java.com/es/android/android1.html" title="video sobre instalación android-sdk">aquí</a> hay un video en español que lo explica muy bien como hacerlo. </p>
<p>Empecé a leer sobre como dibujar imágenes, según dice la documentación oficial  Android provee la biblioteca de gráficos 2D para dibujar y animar forma é imágenes personalizadas. Los paquetes android.graphics.drawable y android.view.animation es donde se encuentran las clases más comunes que se utilizan para dibujar y animar en dos dimensión.<br />
Para dibujar gráficos en aplicaciones android  se puede utilizar objetos Drawable ó un par de subclases de Drawable para  crear animaciones que puedan (moverse, girar ó rotar) un solo gráfico ó la animación de una serie de gráficos (como una película).<br />
 Los Drawables son todo aquello que se puede dibujar en una View (vista),  es la clase de la cual heredan una variedad de tipos de gráficos, incluyendo BitmapDrawable, ShapeDrawable, PictureDrawable, LayerDrawable y otros. Hay tres maneras distintas de instanciar una clase Drawable.<br />
- Utilizar una imagen almacenada en el directorio de recursos de nuestro proyecto.<br />
- Utilizar un XML que define las propiedades del objeto para luego poder recuperarlo mediante getDrawable() y el ID que se le asignó en el XML.<br />
- Utilizando los constructores propios de la clase.<br />
____________________________________________________________<br />
Creación de imágenes desde recursos</p>
<p>Una forma sencilla de agregar gráficos  a su aplicación es por referencia  a una imagen desde los recursos de su proyecto.<br />
Los tipos de archivos soportados son PNG (preferidos), JPG (aceptables) y GIF (todos) .<br />
Esta técnica, obviamente, sería preferible para los iconos, logotipos u otros gráficos como los utilizados en un juego.<br />
Para utilizar un recurso de imagen, basta con añadir el archivo al directorio /res/drawable/ de su proyecto. Desde allí se puede hacer referencia desde el código o desde el Diseño XML.<br />
De cualquier manera, se hace referencia mediante un identificador de recursos (id), que es el nombre del archivo sin la extensión del tipo de archivo (por ejemplo my_image.png se referencia como my_image).<br />
Código de ejemplo</p>
<p>El siguiente fragmento de código muestra como crear una ImageView que utiliza la imagen de los recursos drawable y la agrega al diseño.</p>
<pre><code>public class AgregarImagen extends Activity {
	/** inicia la actividad una vez creada. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// Crear un LinealLayout en el que se agrega la ImageView
		LinearLayout mLinearLayout = new LinearLayout(this);

		// Instanciar una ImageView y definir sus propiedades
		ImageView i = new ImageView(this);
		i.setImageResource(R.drawable.images);
		i.setAdjustViewBounds(true); // establecer los limites de ImageView
		// con las dimensiones disponibles 

		i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
				LayoutParams.WRAP_CONTENT));

		// Agregar la ImageView al diseño y definir el diseño como el contenido
		// de la vista
		mLinearLayout.addView(i);
		setContentView(mLinearLayout);

	}
}</code></pre>
<p>Dentro del método onCreate que inicia la actividad se crea el campo mLinearLayout que hace referencia a un LinearLayout que es un contenedor de widgets que los muestra alineados horizontal o verticalmente.</p>
<p>Se crea el objeto i de la clase ImageView que hace referencia al padre View, ImageView permite cargar imagenes desde recursos externos calcular su tamaño y mostrarla en una vista, se busca la imagen guardada en R.drawable, se ajusta a las dimensiones disponibles, se establece los parámetros de diseño con un objeto Gallery para que la imagen ocupe solo el espacio necesario para mostrar su contenido .<br />
Se agrega la imagen al diseño y se muestra el diseño en la vista.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pymanimal.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pymanimal.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pymanimal.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pymanimal.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pymanimal.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pymanimal.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pymanimal.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pymanimal.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pymanimal.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pymanimal.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pymanimal.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pymanimal.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pymanimal.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pymanimal.wordpress.com/264/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=264&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pymanimal.wordpress.com/2011/07/08/procesamiento-de-imagenes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b4f759fd18b2c3efdab440fdc599583?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dan5sanf</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2011/07/android-logo2.png?w=300" medium="image">
			<media:title type="html">android-logo</media:title>
		</media:content>
	</item>
		<item>
		<title>De Python a Java</title>
		<link>http://pymanimal.wordpress.com/2011/07/01/de-python-a-java/</link>
		<comments>http://pymanimal.wordpress.com/2011/07/01/de-python-a-java/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 14:11:04 +0000</pubDate>
		<dc:creator>dan5sanf</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://pymanimal.wordpress.com/?p=251</guid>
		<description><![CDATA[De Python a Java La experiencia de haber estudiado los fundamentos de la programación con python fue muy buena y estoy de acuerdo de que es un muy buen primer lenguaje de programación. El profesor que dicto el curso, sostenía que este era el mejor lenguaje de programación y que se debía usar para todo. <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=251&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>De Python a Java</p>
<p>La experiencia de haber estudiado los fundamentos de la programación con <a href="http://es.wikipedia.org/wiki/Python" title="Descripción de Python" target="_blank">python</a> fue muy buena y estoy de acuerdo de que es un muy buen primer lenguaje de programación.<br />
El profesor que dicto el curso, sostenía que este era el mejor lenguaje de programación y que se debía usar para todo.<br />
Sin entrar en fundamentalismos ni debates filosóficos, aceptando que python se aplica en muchas áreas, algunas con mucho éxito (como otros lenguajes de programación) sentí que tenia que investigar otras alternativas.<br />
Empecé estudiando el lenguaje <a href="http://es.wikipedia.org/wiki/C_%28lenguaje_de_programaci%C3%B3n%29" title="Descripción de C" target="_blank">C</a>, del cual se habla mucho de sus virtudes, algunos lo consideran el padre de todos los lenguajes y  destacan su importancia para comprender los fundamentos de la programación.<br />
Después de estudiar los conceptos básicos de C, para desarrollar la programación orientada a objetos debía seguir con <a href="http://es.wikipedia.org/wiki/C%2B%2B" title="Descripcion de C++" target="_blank">C++</a>. En ese momento descubrí <a href="http://es.wikipedia.org/wiki/Java_%28lenguaje_de_programaci%C3%B3n%29" title="Descripción de Java" target="_blank">Java</a> por la demanda laboral que tenía causa por la cual en muchas facultades lo están enseñando.<br />
Cuando lo comencé a investigar quede fascinado por muchas cosas de el que me gustaron, solo voy a comentar a nivel de experiencia personal las diferencia entre uno y otro que me llamaron la atención sin entrar en juicios de valor.<br />
Python es un lenguaje interpretado el interprete convierte código fuente en lenguaje maquina, Java tiene una primera compilación que convierte al código fuente en <a href="http://es.wikipedia.org/wiki/Bytecode" title="Descripción de bytecode" target="_blank">bytecode</a> (algo parecido a <a href="http://es.wikipedia.org/wiki/Lenguaje_ensamblador" title="Descripción de lenguaje ensamblador" target="_blank">assembler</a>) y después la máquina virtual de java <a href="http://es.wikipedia.org/wiki/M%C3%A1quina_virtual_Java" title="Descripción de la JVM" target="_blank">JVM</a> lo convierte en lenguaje máquina.<br />
Python es multiparadigma, se puede programar en el aplicando muchos estilos diferentes de programación, Java solo permite programación orientada a objetos por considerar esta la mejor practica.<br />
La documentación oficial de Java también me llamo la atención ordenada en una jerarquía de clases en formato de página web mucho más eficiente que la documentación de Python.<br />
La sintaxis de Python es sintética y muy elegante es una de sus grandes virtudes, Java es más tipeado y extenso pero esto no llega a ser un impedimento por el uso de los <a href="http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado" title="Desctipción de IDE" target="_blank">IDE</a> de programación.<br />
A través de Java conocí a <a href="http://es.wikipedia.org/wiki/NetBeans" title="Descripcion de NetBeans" target="_blank">NetBeans</a> y <a href="http://es.wikipedia.org/wiki/Eclipse_%28software%29" title="Descripción de Eclipse" target="_blank">Eclipse</a> dos entornos de programación gratuitos muy completos hechos en Java con los cuales mi inicio en este lenguaje fue un verdadero placer y cada día que los uso le descubro infinidad de recursos que facilitan y permiten el aprendizaje de pautas de diseño y buenos hábitos de programación en el desarrollo de aplicaciones Java.<br />
Hace seis meses deje de programar en Python y me dedique de lleno a la programación en Java, esto me llevo a una comprensión más amplia y profunda de la programación orientada a objetos lo cual cambio mi visión sobre el diseño del software.<br />
Valoro este cambió porque amplio el horizonte y la motivación por seguir en este apasionante camino de conocimiento. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pymanimal.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pymanimal.wordpress.com/251/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pymanimal.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pymanimal.wordpress.com/251/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pymanimal.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pymanimal.wordpress.com/251/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pymanimal.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pymanimal.wordpress.com/251/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pymanimal.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pymanimal.wordpress.com/251/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pymanimal.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pymanimal.wordpress.com/251/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pymanimal.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pymanimal.wordpress.com/251/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=251&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pymanimal.wordpress.com/2011/07/01/de-python-a-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b4f759fd18b2c3efdab440fdc599583?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dan5sanf</media:title>
		</media:content>
	</item>
		<item>
		<title>Registro de usuarios</title>
		<link>http://pymanimal.wordpress.com/2010/04/18/registro-de-usuarios/</link>
		<comments>http://pymanimal.wordpress.com/2010/04/18/registro-de-usuarios/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 14:47:40 +0000</pubDate>
		<dc:creator>dan5sanf</dc:creator>
				<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://pymanimal.wordpress.com/?p=226</guid>
		<description><![CDATA[Django versión 1.0 SO Debian lenny Necesito hacer un formulario de registro de usuario que contenga nombre de usuario correo electrónico y contraseña. Si bien como dice el Django book en el capítulo 14 Django proporciona un formulario prefabricado que se puede usar con este fin con el modulo UserCreationForm como se describe en el <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=226&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Django versión 1.0<br />
SO Debian lenny<br />
Necesito hacer un formulario de registro de usuario que contenga nombre de usuario correo electrónico y contraseña.<br />
Si bien como dice el <a href="http://www.djangobook.com/en/2.0/">Django book</a> en el <a href="http://www.djangobook.com/en/2.0/chapter14/">capítulo 14</a> Django proporciona un formulario prefabricado que se puede usar con este fin con el modulo UserCreationForm como se describe en el ejemplo, este gestiona solo usuario y contraseña no posee campo de correo electrónico.<br />
Por eso decidí crear un formulario que ingresara estos datos a bajo nivel como también se describe en ese capitulo del libro.</p>
<p>Para empezar agregue la siguiente entrada a urls.py</p>
<pre><code>
(r'^register/$', 'mysite.books.views.register'),

Luedo escribí la clase register_user formulario en forms.py

class register_user(forms.Form):
    usuario = forms.CharField(max_length=30)
    email = forms.EmailField()
    password1 = forms.CharField(max_length=10, widget= forms.PasswordInput)
    password2 = forms.CharField(max_length=10, widget= forms.PasswordInput)
</code></pre>
<p>Esta clase define los campos del formulario que son una entrada de usuario, e- mail, contraseña y repetir la contraseña.<br />
En views.py primero importo desde forms.py register_user para usarlo en la función register.</p>
<p>from forms import register_user</p>
<p>Luego defino la función register de esta manera:</p>
<pre><code>
def register(request):
    if request.method == 'POST':
        form = register_user(request.POST)
        if form.is_valid():
            #cd = form.cleaned_data
            name_user = form.cleaned_data['usuario']
            email_user = form.cleaned_data['email']
            pass_user = form.cleaned_data['password1']
create_user = User.objects.create_user(username= name_user, email= email_user,
password=pass_user)

            create_user.is_staff = True
            create_user.save()
            return HttpResponseRedirect('/specials_books/')
    else:
        form = register_user()
    return render_to_response('registration/register.html', {'form': form})
</code></pre>
<p>Si hay un envío del formulario por medio del método POST accedo a los datos y los guardo en form, se validan y volvemos a acceder por medio de cleaned_data</p>
<pre><code>
name_user = form.cleaned_data['usuario']
            email_user = form.cleaned_data['email']
            pass_user = form.cleaned_data['password1']
</code></pre>
<p>Luego creamos un usuario con estos datos</p>
<pre><code>
create_user = User.objects.create_user(username= name_user, email= email_user,
password=pass_user)
</code></pre>
<p>Y luego los guardamos.</p>
<pre><code>
create_user.is_staff = True
create_user.save()
</code></pre>
<p>Esta vista asume que existe la carpeta registration y dentro el archivo register.html que sería algo así</p>
<pre><code>
&lt;div class=&quot;form_subtitle&quot;&gt;crear un nuevo usuario&lt;/div&gt;
                 &lt;form name=&quot;.&quot; method=&quot;post&quot;&gt;          
                    &lt;div class=&quot;form_row&quot;&gt;
                    &lt;div class=&quot;contact_input&quot; /&gt;{{ form.usuario.errors }}&lt;/div&gt;
                    &lt;label class=&quot;contact&quot;&gt;&lt;strong&gt;usuario:&lt;/strong&gt;&lt;/label&gt;
                    &lt;div class=&quot;contact_input&quot; /&gt;{{ form.usuario }}&lt;/div&gt;
                    &lt;/div&gt;  

                    &lt;div class=&quot;form_row&quot;&gt;
                    &lt;div class=&quot;contact_input&quot; /&gt;{{ form.email.errors }}&lt;/div&gt;
                    &lt;label class=&quot;contact&quot;&gt;&lt;strong&gt;Email:&lt;/strong&gt;&lt;/label&gt;
                    &lt;div class=&quot;contact_input&quot; /&gt;{{ form.email }}&lt;/div&gt;
                    &lt;/div&gt;

                    &lt;div class=&quot;form_row&quot;&gt;
                    &lt;div class=&quot;contact_input&quot; /&gt;{{ form.password1.errors }}&lt;/div&gt;
                    &lt;label class=&quot;contact&quot;&gt;&lt;strong&gt;contrase&ntilde;a:&lt;/strong&gt;&lt;/label&gt;
                    &lt;div class=&quot;contact_input&quot; /&gt;{{ form.password1 }}&lt;/div&gt;
                    &lt;/div&gt;


                    &lt;div class=&quot;form_row&quot;&gt;
                    &lt;div class=&quot;contact_input&quot; /&gt;{{ form.password2.errors }}&lt;/div&gt;
                    &lt;label class=&quot;contact&quot;&gt;&lt;strong&gt;de vuelta:&lt;/strong&gt;&lt;/label&gt;

                    &lt;div class=&quot;contact_input&quot; /&gt;{{ form.password2 }}&lt;/div&gt;
                    &lt;/div&gt;

                    &lt;div class=&quot;form_row&quot;&gt;
                    &lt;input type=&quot;submit&quot; class=&quot;register&quot; value=&quot;registrar&quot; /&gt;
                    &lt;/div&gt;   
                  &lt;/form&gt;     
                &lt;/div&gt;

</code></pre>
<h3>Agregando más validación</h3>
<p>Además del sistema de validación que proporciona el objeto form, decidí agregar dos mas, que la cantidad de dígitos de la contraseña no sea menor que cuatro y que sea necesario escribirla de vuelta.<br />
Para ello se agrego dentro la clase register_user en el archivo forms.py las funciones<br />
clean_password1 y clean_password2 quedando el código completo así.</p>
<pre><code>
class register_user(forms.Form):
    usuario = forms.CharField(max_length=30)
    email = forms.EmailField()
    password1 = forms.CharField(max_length=10, widget= forms.PasswordInput)
    password2 = forms.CharField(max_length=10, widget= forms.PasswordInput)

#Validar de la cantidad de letras del password
    def clean_password1(self):
        password1 = self.cleaned_data.get('password1', '')
        num_words = len(password1)
        if num_words &lt; 4:
            raise forms.ValidationError(&#039;Ingrese mas de cuatro palabras&#039;)
        return password1
#Comparar las dos contraseñas
    def clean_password2(self):
        password1 = self.cleaned_data.get(&#039;password1&#039;, &#039;&#039;)
        password2 = self.cleaned_data.get(&#039;password2&#039;, &#039;&#039;)
        if password1 != password2:
            raise forms.ValidationError(&#039;Repita la contraseña correctamente&#039;)
        return password2
</code></pre>
<p>Todo esto puede verse funcionando en el proyecto <a href="http://code.google.com/p/webookstore/">webookstore</a> donde fue usado.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pymanimal.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pymanimal.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pymanimal.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pymanimal.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pymanimal.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pymanimal.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pymanimal.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pymanimal.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pymanimal.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pymanimal.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pymanimal.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pymanimal.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pymanimal.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pymanimal.wordpress.com/226/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=226&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pymanimal.wordpress.com/2010/04/18/registro-de-usuarios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b4f759fd18b2c3efdab440fdc599583?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dan5sanf</media:title>
		</media:content>
	</item>
		<item>
		<title>ImageField</title>
		<link>http://pymanimal.wordpress.com/2010/03/12/217/</link>
		<comments>http://pymanimal.wordpress.com/2010/03/12/217/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 03:03:27 +0000</pubDate>
		<dc:creator>dan5sanf</dc:creator>
				<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://pymanimal.wordpress.com/2010/03/12/217/</guid>
		<description><![CDATA[SO Debian lenny Django version 1.0 final Para usar el campo ImageField en mi modelo se necesita PIL (Python Imaging Library), la librería de tratamiento de imágenes para Python. Primero verificar si tenemos instaladas las librerías de soporte para imágenes sudo apt-get install libjpeg62-dev sudo apt-get install zlib1g-dev sudo apt-get install libfreetype6-dev sudo apt-get install <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=217&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>SO Debian lenny<br />
Django version 1.0 final</p>
<p>Para usar el campo ImageField en mi modelo se necesita PIL (Python Imaging Library), la librería de tratamiento de imágenes para Python. </p>
<p>Primero verificar si tenemos instaladas las librerías de soporte para imágenes</p>
<p>sudo apt-get install libjpeg62-dev<br />
sudo apt-get install zlib1g-dev<br />
sudo apt-get install libfreetype6-dev<br />
sudo apt-get install liblcms1-dev</p>
<p>Después desde Synaptic instale PIL seleccione el paquete</p>
<p>python-imaging 1.1.6-3 Python Imaging Library</p>
<p>En models.py agregue lo siguiente<br />
image_book = models.ImageField(upload_to=&#8217;images/books&#8217;)</p>
<p>El siguiente <a href="http://django.es/blog/error-comun-en-upload_to-de-imagefields-y-filefields/">articulo</a> explica muy bien como funciona la ruta de &#8216;upload_to&#8217;</p>
<p>Quedando así mi MEDIA_ROOT</p>
<p>MEDIA_ROOT = &#8216;/home/dan5sanf/mysite/media&#8217;</p>
<p>Dentro de la carpeta &#8216;images&#8217; upload_to crea la carpeta books donde guarda las imágenes que levanta.</p>
<p>En el template siendo &#8216;results&#8217; la variable que contiene una consulta a la base de datos utilizo el campo &#8216;image_book&#8217; de la siguiente manera:</p>
<p>{% for book in results %}</p>
<p>&lt;img src=&quot;http://localhost:8000/site_media/{{ book.image_book}}&quot; alt=&quot;&quot; /</p>
<p>Si uno pone en el template {{ book.image_book }} vera que lo que muestra es una ruta hacia una imagen (&#039;images/book/imagen.png&#039;) que al parecer es lo que nos devuelve el campo ImageField, una ruta hacia una imagen determinada.</p>
<p>Todo esto puede verse funcionando en el proyecto <a href="http://code.google.com/p/webookstore/">webookstore</a> donde fue usado.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pymanimal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pymanimal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pymanimal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pymanimal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pymanimal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pymanimal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pymanimal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pymanimal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pymanimal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pymanimal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pymanimal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pymanimal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pymanimal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pymanimal.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=217&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pymanimal.wordpress.com/2010/03/12/217/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b4f759fd18b2c3efdab440fdc599583?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dan5sanf</media:title>
		</media:content>
	</item>
		<item>
		<title>Contenidos estáticos</title>
		<link>http://pymanimal.wordpress.com/2010/03/06/contenidos-estaticos/</link>
		<comments>http://pymanimal.wordpress.com/2010/03/06/contenidos-estaticos/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 12:08:31 +0000</pubDate>
		<dc:creator>dan5sanf</dc:creator>
				<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://pymanimal.wordpress.com/?p=203</guid>
		<description><![CDATA[css Django version 1.0 final Dando mis primeros pasos con Django, para agregar los css hice lo siguiente; leí la documentación oficial que dice que Django no sirve archivos estáticos como imágenes, hojas de estilo o videos. Deja este trabajo para el servidor web que usted elija. El razonamiento es que los servidores web estándar, <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=203&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3>css</h3>
<p>Django version 1.0 final<br />
Dando mis primeros pasos con Django, para agregar los css hice lo siguiente; leí la <a href="http://docs.djangoproject.com/en/dev/howto/static-files/">documentación oficial</a> que dice que Django no sirve archivos estáticos como imágenes, hojas de estilo o videos. Deja este trabajo para el servidor web que usted elija.<br />
El razonamiento es que los servidores web estándar, como por ejemplo Apache, lighttpd y Cherokee, son mucho más ajustados para servir archivos estáticos en el marco de la aplicación Web.<br />
Con eso dicho, Django es compatible con archivos estáticos durante el desarrollo. Usted puede utilizar el django.views.static.serve () para servir a los archivos multimedia.<br />
El uso de este método es ineficiente e inseguro. No use esto en un entorno de producción. Utilice esto sólo para el desarrollo.<br />
Para obtener información sobre servir archivos estáticos en un entorno de producción de Apache, consulte la documentación de <a href="http://docs.djangoproject.com/en/1.0/howto/deployment/modpython/#serving-media-files">mod_python</a>.</p>
<h3>Como hacerlo</h3>
<p>Creo la carpeta &#8216;media&#8217; dentro de mi proyecto &#8216;mysite&#8217;, dentro de &#8216;media&#8217; creo las carpetas &#8216;css&#8217;  e  &#8216;images&#8217;.<br />
Agregamos en el archivo urls.py la siguiente entrada:</p>
<p>(r&#8217;^site_media/(?P.*)$&#8217;, &#8216;django.views.static.serve&#8217;,<br />
        {&#8216;document_root&#8217;: &#8216;/home/dan5sanf/mysite/media&#8217;}),</p>
<p>Donde &#8216;/home/dan5sanf/mysite/media&#8217; es la ruta absoluta con sintaxis de punto hacia la carpeta &#8216;media&#8217; donde se encuentran los contenidos estáticos.</p>
<p>Se puede mejorar esto haciendo  una entrada en el archivo de configuración y utilizar el valor de ajuste allí. Eso le permitirá a usted y otros desarrolladores que trabajan en el código cambiar fácilmente el valor según sea necesario.<br />
Para eso  en el archivo urls.py importamos settings.py</p>
<p>from django.conf import settings</p>
<p>Cambiamos la entrada anterior a: </p>
<p>(r&#8217;^site_media/(?P.*)$&#8217;, &#8216;django.views.static.serve&#8217;,<br />
        {&#8216;document_root&#8217;: settings.STATIC_DOC_ROOT}),</p>
<p>Agregamos la ruta a &#8216;media&#8217; en la variable STATIC_DOC_ROOT del archivo settings.py</p>
<p>STATIC_DOC_ROOT = &#8216;/home/dan5sanf/mysite/media&#8217;</p>
<h3>link</h3>
<p>En nuestra plantilla base.html el link presenta la entrada a urls.py a travéz de &#8216;site_media&#8217; que nos redirige a la carpeta &#8216;media&#8217; y desde allí la ruta al archivo que deseamos usar (&#8216;/css/layout.css&#8217;). </p>
<p>href=&#8217;http://localhost:8000/site_media/css/layout.css&#8217;/&gt;</p>
<p>Para agregar una imagen en la página es similar, suponiendo que la imagen se llama &#8216;logo.gif&#8217; que esta en la carpeta  &#8216;images&#8217; dentro de la  carpeta &#8216;media&#8217; el enlace queda así:</p>
<p>img src=&#8221;site_media/images/logo.gif&#8221; alt=&#8221;" title=&#8221;" border=&#8221;0&#8243; /&gt;</p>
<p>Esto nos permitirá usar estilo e imágenes en nuestra página html usando Django.</p>
<p>Todo esto puede verse funcionando en el proyecto <a href="http://code.google.com/p/webookstore/">webookstore</a> donde fue usado.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pymanimal.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pymanimal.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pymanimal.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pymanimal.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pymanimal.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pymanimal.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pymanimal.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pymanimal.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pymanimal.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pymanimal.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pymanimal.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pymanimal.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pymanimal.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pymanimal.wordpress.com/203/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=203&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pymanimal.wordpress.com/2010/03/06/contenidos-estaticos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b4f759fd18b2c3efdab440fdc599583?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dan5sanf</media:title>
		</media:content>
	</item>
		<item>
		<title>relaxtives</title>
		<link>http://pymanimal.wordpress.com/2010/02/28/relaxtives/</link>
		<comments>http://pymanimal.wordpress.com/2010/02/28/relaxtives/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 21:27:47 +0000</pubDate>
		<dc:creator>dan5sanf</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://pymanimal.wordpress.com/?p=172</guid>
		<description><![CDATA[Este es nuestro primer proyecto colaborativo. Somos estudiantes de un curso de programación en la Escuela de Oficios San Cayetano de Carapachay. Estamos desarrollando esta aplicación que servirá como respaldo a una institución de Beccar. La idea es cargar todos los alumnos de una escuela y relacionar los familiares. Elegimos hacerlo en wxPython con una <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=172&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://pymanimal.files.wordpress.com/2010/02/principal.png"><img src="http://pymanimal.files.wordpress.com/2010/02/principal.png?w=300&#038;h=211" alt="" title="principal" width="300" height="211" class="aligncenter size-medium wp-image-173" /></a><br />
Este es nuestro primer proyecto colaborativo. Somos estudiantes de un curso de programación en la Escuela de Oficios San Cayetano de Carapachay. Estamos desarrollando esta aplicación que servirá como respaldo a una institución de Beccar. La idea es cargar todos los alumnos de una escuela y relacionar los familiares. Elegimos hacerlo en wxPython con una base de datos MySQL. Para hacer la GUI usamos wxGlade, un lindo ayudante para la siempre tediosa tarea de diseñar las ventanas. Luego usamos Geany para tocar el código &#8220;a mano&#8221;.</p>
<h2>
<p>Mi trabajo</p>
</h2>
<p>Mi equipo esta formado por Hernan Montero y yo, nos toco realizar los formularios de Ingreso de datos y Modificación de datos. Las entradas del blog de la categoría wxPython son aspectos del diseño que me parecieron interesante mostrar </p>
<p><a href="http://pymanimal.files.wordpress.com/2010/02/pantallazo-relaxtives-alta-de-alumnos.png"><img src="http://pymanimal.files.wordpress.com/2010/02/pantallazo-relaxtives-alta-de-alumnos.png?w=300&#038;h=221" alt="" title="Pantallazo-Relaxtives - Alta de alumnos" width="300" height="221" class="aligncenter size-medium wp-image-189" /></a></p>
<p>
        En ingreso de datos la logica de la aplicacion es sencilla; se pide los datos del alumno y se ingresan a la base de datos.<br />
La parte mas elavorada es la grilla de la isquierda que agrega filas de acuerdo a la nesecidad del alumno.<br />
        Además tiene la caracteristica de tener cada celda de la grilla un ComboBox adentro con los monbres de los alumnos sacados de la base de datos y una lista con los parentezcos más comunes.</p>
<p> Modificar datos es mucho mas elaborado por abrir el formulario con todos los datos cargados que se desean modificar.</p>
<p><a href="http://pymanimal.files.wordpress.com/2010/02/modificar_datos.png"><img src="http://pymanimal.files.wordpress.com/2010/02/modificar_datos.png?w=300&#038;h=221" alt="" title="modificar_datos" width="300" height="221" class="aligncenter size-medium wp-image-185" /></a></p>
<p>
        La lógica es la siguiente: se abre una ventana de busqueda, una vez localizado el alumno se carga los datos de este en el formulario, se modifican y se vuelven a ingresar a la base de datos.</p>
<p><a href="http://pymanimal.files.wordpress.com/2010/02/busqueda.png"><img src="http://pymanimal.files.wordpress.com/2010/02/busqueda.png?w=300&#038;h=121" alt="" title="busqueda" width="300" height="121" class="aligncenter size-medium wp-image-186" /></a><br />
</br><br />
<a href="http://pymanimal.files.wordpress.com/2010/02/listado.png"><img src="http://pymanimal.files.wordpress.com/2010/02/listado.png?w=300&#038;h=280" alt="" title="listado" width="300" height="280" class="aligncenter size-medium wp-image-187" /></a><br />
Sitio web de relaxtives: <a href="http://code.google.com/p/relaxtives/" id='links'>http://code.google.com/p/relaxtives/</a></li>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pymanimal.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pymanimal.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pymanimal.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pymanimal.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pymanimal.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pymanimal.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pymanimal.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pymanimal.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pymanimal.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pymanimal.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pymanimal.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pymanimal.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pymanimal.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pymanimal.wordpress.com/172/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=172&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pymanimal.wordpress.com/2010/02/28/relaxtives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b4f759fd18b2c3efdab440fdc599583?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dan5sanf</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2010/02/principal.png?w=300" medium="image">
			<media:title type="html">principal</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2010/02/pantallazo-relaxtives-alta-de-alumnos.png?w=300" medium="image">
			<media:title type="html">Pantallazo-Relaxtives - Alta de alumnos</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2010/02/modificar_datos.png?w=300" medium="image">
			<media:title type="html">modificar_datos</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2010/02/busqueda.png?w=300" medium="image">
			<media:title type="html">busqueda</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2010/02/listado.png?w=300" medium="image">
			<media:title type="html">listado</media:title>
		</media:content>
	</item>
		<item>
		<title>wx.Frame cambio de estilo</title>
		<link>http://pymanimal.wordpress.com/2009/10/11/wx-frame-cambio-de-estilo/</link>
		<comments>http://pymanimal.wordpress.com/2009/10/11/wx-frame-cambio-de-estilo/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 20:49:39 +0000</pubDate>
		<dc:creator>dan5sanf</dc:creator>
				<category><![CDATA[wxPython]]></category>

		<guid isPermaLink="false">http://pymanimal.wordpress.com/?p=154</guid>
		<description><![CDATA[Al crear una wx.Frame, class Frame(wx.Frame): def __init__(self, *args, **kwds): #MyFrame.__init__ kwds["style"] = wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwds) esta tendra el estilo wx.DEFAULT_FRAME_STYLE. Este es una suma de estilos basicos: wx.MAXIMIZE_BOX &#124; wx.MINIMIZE_BOX &#124; wx.RESIZE_BORDER &#124;wx.SYSTEM_MENU &#124; wx.CAPTION &#124; wx.CLOSE_BOX. Para cambiar un estilo individual en una composición de estilo se usa el operador or &#8216;^&#8217;. <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=154&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Al crear una wx.Frame,</p>
<pre><code>class Frame(wx.Frame):
    def __init__(self, *args, **kwds):
        #MyFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)</code></pre>
<p>esta tendra el estilo wx.DEFAULT_FRAME_STYLE.<br />
<img src="http://pymanimal.files.wordpress.com/2009/10/pantallazo-ventana-default.png?w=300&#038;h=241" alt="Pantallazo-Ventana Default" title="Pantallazo-Ventana Default" width="300" height="241" class="aligncenter size-medium wp-image-155" /><br />
Este es una suma de estilos basicos: wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX | wx.RESIZE_BORDER |wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX.<br />
Para cambiar un estilo individual en una composición de estilo se usa el operador or &#8216;^&#8217;.<br />
Necesito crear una ventana basada en el estilo default pero que no pueda cambiar su tamaño.<br />
Para ello al estilo default le quito maximizar , minimizar y que no sea redimencionable la composición quedaría asi:<br />
kwds["style"]=wx.DEFAULT_FRAME_STYLE^(wx.MINIMIZE_BOX|wx.MAXIMIZE_BOX |wx.RESIZE_BORDER))<br />
Esto permitiría ver una ventana de este tipo:<br />
<img src="http://pymanimal.files.wordpress.com/2009/10/pantallazo-relaxtives-busqueda.png?w=300&#038;h=121" alt="Pantallazo-Relaxtives - Busqueda" title="Pantallazo-Relaxtives - Busqueda" width="300" height="121" class="aligncenter size-medium wp-image-159" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pymanimal.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pymanimal.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pymanimal.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pymanimal.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pymanimal.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pymanimal.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pymanimal.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pymanimal.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pymanimal.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pymanimal.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pymanimal.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pymanimal.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pymanimal.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pymanimal.wordpress.com/154/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=154&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pymanimal.wordpress.com/2009/10/11/wx-frame-cambio-de-estilo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b4f759fd18b2c3efdab440fdc599583?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dan5sanf</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2009/10/pantallazo-ventana-default.png?w=300" medium="image">
			<media:title type="html">Pantallazo-Ventana Default</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2009/10/pantallazo-relaxtives-busqueda.png?w=300" medium="image">
			<media:title type="html">Pantallazo-Relaxtives - Busqueda</media:title>
		</media:content>
	</item>
		<item>
		<title>Grid ComboBox MySQL</title>
		<link>http://pymanimal.wordpress.com/2009/09/06/gridcomboboxmysql/</link>
		<comments>http://pymanimal.wordpress.com/2009/09/06/gridcomboboxmysql/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 03:17:20 +0000</pubDate>
		<dc:creator>dan5sanf</dc:creator>
				<category><![CDATA[wxPython]]></category>

		<guid isPermaLink="false">http://pymanimal.wordpress.com/?p=133</guid>
		<description><![CDATA[Hacer lista con consulta a db Cambio del diseño; como los datos de la primera columna están en la base de datos (apellido, nombre y documento) se decidió colocar dentro de la grilla un combobox donde seleccionar estos datos del alumno. La segunda columna de la grilla quedo igual, con un ComboBox dentro. Para hacer <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=133&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong><br />
<h3>Hacer lista con consulta a db</h3>
<p></strong><br />
Cambio del diseño; como los datos de la primera columna están en la base de datos (apellido, nombre y documento) se decidió colocar dentro de la grilla un combobox donde seleccionar estos datos del alumno.<br />
La segunda columna de la grilla quedo igual, con un ComboBox dentro.<br />
Para hacer esto se conecta a la db y se  hace la consulta.</p>
<pre><code>
<h3>tChoiceEditor = wx.grid.GridCellChoiceEditor(['Padre ',
 'Madre','Tio/a ','Primo/a','Hermano/a', 'Madrina',
'Padrino','Vecino/a'] , allowOthers=True)
 c.execute('''select apellidos, nombres, documento from
 alumnos order by apellidos''')
        q = c.fetchall()
        c.close() </h3>

</code></pre>
<p>Luego se crea una lista vacia &#8216;lista&#8217;, se recorre la variable q, que tiene los datos  del fetchall a la db con un for buscando por el indice de q(q[0]) cada dato en la lista.</p>
<pre><code>
<h3>lista = []
        for i in q:
            lista.append(i[0]+" "+ i[1]+" "+ i[2])</h3>

</code></pre>
<p> Se carga a la lista que luego va a usar el tChoiceEditor2 para mostrar en el ComboBox que esta dentro de la grilla.</p>
<pre><code>
<h3>tChoiceEditor2 = wx.grid.GridCellChoiceEditor(lista, allowOthers=True)
        #Asignar a los editores de la célula  la  fila y la columna.
        self.grid_parientes.SetCellEditor(0, 1, tChoiceEditor)
        self.grid_parientes.SetCellEditor(0, 0, tChoiceEditor2)
        #lista
        # Mostrar el tercer elemento de la lista en la celda ChoiceEditor
        #en este caso esta vacia, asi que no aparecera nada
        self.grid_parientes.SetCellValue(0, 1, self.grid_parientes.list[0][5])</h3>

</code></pre>
<p> El código completo y funcional de este formulario se llama <a href="http://code.google.com/p/relaxtives/source/browse/trunk/ingreso_datos.py#">ingreso_datos.py</a> y es parte del proyecto <a href="http://code.google.com/p/relaxtives/">relaxtives</a>.<br />
<img src="http://pymanimal.files.wordpress.com/2009/09/pantallazo-ingreso-de-datos.png?w=300&#038;h=221" alt="Pantallazo-Ingreso de datos" title="Pantallazo-Ingreso de datos" width="300" height="221" class="aligncenter size-medium wp-image-168" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pymanimal.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pymanimal.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pymanimal.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pymanimal.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pymanimal.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pymanimal.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pymanimal.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pymanimal.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pymanimal.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pymanimal.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pymanimal.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pymanimal.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pymanimal.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pymanimal.wordpress.com/133/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pymanimal.wordpress.com&amp;blog=8934568&amp;post=133&amp;subd=pymanimal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pymanimal.wordpress.com/2009/09/06/gridcomboboxmysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b4f759fd18b2c3efdab440fdc599583?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dan5sanf</media:title>
		</media:content>

		<media:content url="http://pymanimal.files.wordpress.com/2009/09/pantallazo-ingreso-de-datos.png?w=300" medium="image">
			<media:title type="html">Pantallazo-Ingreso de datos</media:title>
		</media:content>
	</item>
	</channel>
</rss>
