[pyar] wxPython, segundo round

Mariano Reingart reingart en gmail.com
Jue Feb 9 16:48:10 ART 2012


Algunos consejos:

En vez de concatenar las rutas, usa os.path.join (es mas
multiplataforma, sino en unix la barra invertida da error como
separador de directorios)

OnPaint es un evento que solo se llama para repintar la ventana al
abrir, cambiar tamaño o al activarse, por lo que, para que te dibuje
cuando vos queres, debes llamara a Refresh()

De algunos ejemplos vi que te estaría faltando BeginDrawing y
EndDrawing, pero aparentemente esta deprecado, habria que revisar bien
este tema.

Igualmente quizas te convendría usar doble buffering, puede ser más
optimo para dibujar y refrescar la pantalla:

http://wiki.wxpython.org/YetAnotherDrawingSample

Fijate en el adjunto que te está poniendo los circulos en cualquier
lado, quizas tengas algun tema con el cálculo de coordenadas.
Hay librerias como wx.lib.ogl o float canvas que te abstraen y
simplifican el tema de manejar objetos graficos, refrescar, calcular
coordenadas, movimientos, etc.:

http://wiki.wxpython.org/wxOGL

http://wiki.wxpython.org/FloatCanvas

Te adjunto tambien el prueba4.py ajustado.

Sds

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com



2012/2/9 Sebastian Scheib <stackpointerex en gmail.com>:
> Tercer Round:
>
> def OnPaint(self,e):
>         dc=wx.PaintDC(self)
>         for x in range(1,19):
>             for y in range(1,19):
>                 if(self.tablero.get_valor(x,y)==1):
>                     print self.tablero.get_valor(x,y)
>                     dc.DrawCircle(x*50,y*50,10)
>                 if(self.tablero.get_valor(x,y)==2):
>                     print self.tablero.get_valor(x,y)
>                     dc.DrawCircle(x,y,10)
>         DirectorioImagenes = os.getcwd()+"\images\g19x19.png"
>         bitmap=wx.Bitmap(DirectorioImagenes)
>         dc.DrawBitmap(bitmap,20,20)
>         dc.SetBrush(wx.Brush('#A4A4A4'))
>         dc.DrawRectangle(570,40,600,150)
>
> En la primera pasada, todos los valores de tablero.get_valor van a ser 0,
> pero apenas aprieto un botón esto cambia.
>
> El tema es que aprieto un botón que me cambia un valor de tablero y si bien
> se que entra al bucle al detectar el valor 1 o 2(le agregué esos print por
> ejemplo y los manda), no me dibuja el círculo (es como si no me refrescara
> lo que le hago)
>
> Ahora se que el tema está después de que aprieto el botón porque si le saco
> los if o si hago un if que cumpla antes de presionar el botón me muestra los
> círculos.
>
> Disculpen que esté rompe con el tema pero estoy con muchas ganas de sacar
> que es lo que me falta para que funcione XD.
>
> Saludos y gracias por la paciencia que me muestran.
>
> El 8 de febrero de 2012 18:24, Sebastian Scheib <stackpointerex en gmail.com>
> escribió:
>
>> Sigo probando sin éxito, a veces si cambio el lugar donde hago el bind
>> queda colgadísimo. Ahora estoy de nuevo en donde no me muestra nada. La cosa
>> es que me vaya agarrando un archivo sgf (para los que saben jugar go saben
>> de que hablo) y va leyendo jugada a jugada y poniendo un circulo en el
>> tablero (por ahora no lo tengo bien el mapa pero quería que al menos me
>> aparezca un circulo que haría de pieza).
>>
>> (Por ahora el script es muy burdo, es una primera aproximación, pero me
>> gustaría que se hiciera un refresh con la situación del tablero cada vez que
>> le doy al botón de avanzar)
>>
>> Les paso el archivo con el sgf con el que estoy probando y una imagen por
>> si alguien tiene ganas de verlo.
>>
>> Muchas gracias!
>>
>>
>> El 7 de febrero de 2012 10:40, Ismael Bejarano <ismaelbej en gmail.com>
>> escribió:
>>>
>>> Hola,
>>>
>>> El feb 7, 2012 8:40 a.m., "Sebastian Scheib" <stackpointerex en gmail.com>
>>> escribió:
>>>
>>>
>>> >
>>> > Ahora le agregué un "self" al principio y empezó a tener algo de forma
>>> > la cosa, el problema es que ahora:
>>> >
>>>
>>> Hacer el PaintDC parte del objeto no es correcto, el PaintDC solo es
>>> válido dentro del evento PAINT.
>>>
>>> > def OnPaint(self,e):
>>> >         self.dc=wx.PaintDC(self)
>>> >         DirectorioImagenes = os.getcwd()+"\images\g19x19.png"
>>> >         self.bitmap=wx.Bitmap(DirectorioImagenes)
>>> >         self.dc.DrawBitmap(self.bitmap,20,20)
>>> >         self.dc.SetBrush(wx.Brush('#A4A4A4'))
>>> >         self.dc.DrawRectangle(570,40,600,150)
>>> >         for i in range (1,19):
>>> >             for j in range (1,19):
>>> >                 if(self.tablero.get_valor(i,j)!=0):
>>> >                     self.dc.DrawCircle(i*50,j*50,10)
>>> >
>>> > Cuando aprieto un botón, una posicion de tablero cambia (por lo que en
>>> > ahi en algun punto el valor va a ser distinto de 0 por lo que va a dibujar
>>> > el círculo), pero debugeandoloveo que cuando lo encuentra, pasa el if,
>>> > dibuja el círculo, pero vuelve al if y no al for :(
>>> >
>>>
>>> El evento OnPaint parece estar bien, habría que ver el resto del programa
>>> para ver donde esta el problema.
>>>
>>> Saludos,
>>> Ismael
>>>
>>>
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>
>>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: prueba4.png
Type: image/png
Size: 24446 bytes
Desc: no disponible
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20120209/fa14e99f/attachment.png>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: prueba4.py
Type: text/x-python
Size: 7577 bytes
Desc: no disponible
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20120209/fa14e99f/attachment.py>


More information about the pyar mailing list