Re: [Python-es] borde de celda wx grid

2011-02-14 Por tema Oswaldo Hernández

El 13/02/2011 11:38, damufo escribió:
...


A partir del ejemplo de la demo de wxpython, he logrado dibujar los
bordes de una celda, aunque no comprendo todo el código ya que para mi
nivel de conocimiento me pierdo, fuí logrando cosas por ensaya y error.



Correcto, pero el wx.Grid es un objeto muy potente y complejo, te 
recomiendo le dediques tiempo a estudiar su clases y funcionamiento.



Al grano, resulta que tengo una clase que hereda de Grid.PyGridCellRenderer
esta es la que dibuja la celda especial (en mi caso quiero que le ponga
bordes), con el método Draw() en este caso pinta bordes, además quiero
que trate tambien celdas combinadas.

Lo que me gustaría es que antes de pintar los bordes pintase la celda
normal, y despues sobre ella pintase dichos bordes. Por ejemplo si por
defecto en alineación vertical tengo centrado quiero que así ponga el
texto.
Para ello en el mi calse especial sólo he puesto el código que dibuja
los bordes y el caso es que tal como esta lo de dentro se queda sin
rellenar.


Cuando creas tu propio renderizador el grid asume que tu te vas a 
encargar de todo, para eso te pasa todo lo que necesitas en el metodo 
Draw():


- grid.GetCellValue(row, col) te daria el valor de la celda
- attr es una instancia de GridCellAttr [1], usandola puedes saber la 
alineación, fuente, colores a utilizar, etc.

- dc es el el DeviceContext sobre el que pintar [2]
- rect te informa del tamaño actual de la celda
- isSelected te indica si la celda esta en modo selección para que la 
pintes del modo adecuado




Si no me equivoco este método Draw() está sobrecargando el Draw() por
defecto, hay forma de que cuando llame mi método Draw() "modificado",
dentro de el llame antes al método Draw() por defecto (clase de la que
hereda) y despues realice las modificaciones que he puesto en mi método
sobrecargado?

Espero que se entienda. (primero pinta como si de una celda normal se
tratase y despues por encima pon estas líneas)



Con clases "normales" harías una derivación del renderizador 
predeterminado (GridCellStringRenderer) para hacer lo que tu quieres:


class CellRenderer(Grid.GridCellStringRenderer):
def Draw(self, grid, attr, dc, rect, row, col, isSelected):
# Ejecutar GridCellStringRenderer
super(CellRenderer, self).Draw(grid, attr, dc, rect, row, col, 
isSelected)

# Parte personalizada
dc.SetPen( wx.Pen(wx.Colour( 255, 0, 0 ) , 1, wx.SOLID))
dc.DrawLine( rect.x + rect.width-1, rect.y, rect.x + 
rect.width-1, rect.y + rect.height)

...

Pero si lo pruebas verás que eso no funciona.

Haciendo alguna prueba he descubierto un truco que en principio parece 
que funciona, pero si utilizas, hazlo con precaución, ya que no lo he 
visto documentado en ningún sitio y desconozco si puede tener algún 
efecto secundario:


class CellRenderer(Grid.PyGridCellRenderer):
def Draw(self, grid, attr, dc, rect, row, col, isSelected):
# ejecuar renderizador de strings
Grid.GridCellStringRenderer().Draw(grid, attr, dc, rect, row, 
col, isSelected)

# Agregar parte personalizada
dc.SetPen( wx.Pen(wx.Colour( 255, 0, 0 ) , 1, wx.SOLID))
	dc.DrawLine( rect.x + rect.width-1, rect.y, rect.x + rect.width-1, 
rect.y + rect.height)

...


Un Saludo



[1] 
[2] 

--
Oswaldo Hernández
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] borde de celda wx grid

2011-02-14 Por tema damufo

Hola:

En 2011/02/14 10:39, Oswaldo Hernández escribiu:

El 13/02/2011 11:38, damufo escribió:
...


A partir del ejemplo de la demo de wxpython, he logrado dibujar los
bordes de una celda, aunque no comprendo todo el código ya que para mi
nivel de conocimiento me pierdo, fuí logrando cosas por ensaya y error.



Correcto, pero el wx.Grid es un objeto muy potente y complejo, te 
recomiendo le dediques tiempo a estudiar su clases y funcionamiento.
Hasta ahora me había ido apañando con el listcontrol, pero para lo que 
ahora trato de hacer ya no me vale por eso no me ha quedado más remedio 
que usar el grid. La verdad es que sí se ve muy potente. Supongo que 
cuando más lo use, y con tiempo iré mejorando mi dominio sobre el mismo. 
Haré caso a tus recomendaciones.


Al grano, resulta que tengo una clase que hereda de 
Grid.PyGridCellRenderer

esta es la que dibuja la celda especial (en mi caso quiero que le ponga
bordes), con el método Draw() en este caso pinta bordes, además quiero
que trate tambien celdas combinadas.

Lo que me gustaría es que antes de pintar los bordes pintase la celda
normal, y despues sobre ella pintase dichos bordes. Por ejemplo si por
defecto en alineación vertical tengo centrado quiero que así ponga el
texto.
Para ello en el mi calse especial sólo he puesto el código que dibuja
los bordes y el caso es que tal como esta lo de dentro se queda sin
rellenar.


Cuando creas tu propio renderizador el grid asume que tu te vas a 
encargar de todo, para eso te pasa todo lo que necesitas en el metodo 
Draw():


- grid.GetCellValue(row, col) te daria el valor de la celda
- attr es una instancia de GridCellAttr [1], usandola puedes saber la 
alineación, fuente, colores a utilizar, etc.

- dc es el el DeviceContext sobre el que pintar [2]
- rect te informa del tamaño actual de la celda
- isSelected te indica si la celda esta en modo selección para que la 
pintes del modo adecuado
Si, lo que comentas llegué a comprenderlo. No profundamente pero sí 
hasta donde indicas.




Si no me equivoco este método Draw() está sobrecargando el Draw() por
defecto, hay forma de que cuando llame mi método Draw() "modificado",
dentro de el llame antes al método Draw() por defecto (clase de la que
hereda) y despues realice las modificaciones que he puesto en mi método
sobrecargado?

Espero que se entienda. (primero pinta como si de una celda normal se
tratase y despues por encima pon estas líneas)



Con clases "normales" harías una derivación del renderizador 
predeterminado (GridCellStringRenderer) para hacer lo que tu quieres:


class CellRenderer(Grid.GridCellStringRenderer):
def Draw(self, grid, attr, dc, rect, row, col, isSelected):
# Ejecutar GridCellStringRenderer
super(CellRenderer, self).Draw(grid, attr, dc, rect, row, col, 
isSelected)

# Parte personalizada
dc.SetPen( wx.Pen(wx.Colour( 255, 0, 0 ) , 1, wx.SOLID))
dc.DrawLine( rect.x + rect.width-1, rect.y, rect.x + 
rect.width-1, rect.y + rect.height)

...
Justo lo de arriba también lo había intentado, me supuse que el super() 
me ayudaría y tal como indicas a mi tampoco me funcionó, no se por que?.




Pero si lo pruebas verás que eso no funciona.

Haciendo alguna prueba he descubierto un truco que en principio parece 
que funciona, pero si utilizas, hazlo con precaución, ya que no lo he 
visto documentado en ningún sitio y desconozco si puede tener algún 
efecto secundario:


class CellRenderer(Grid.PyGridCellRenderer):
def Draw(self, grid, attr, dc, rect, row, col, isSelected):
# ejecuar renderizador de strings
Grid.GridCellStringRenderer().Draw(grid, attr, dc, rect, row, 
col, isSelected)

# Agregar parte personalizada
dc.SetPen( wx.Pen(wx.Colour( 255, 0, 0 ) , 1, wx.SOLID))
dc.DrawLine( rect.x + rect.width-1, rect.y, rect.x + rect.width-1, 
rect.y + rect.height)

...

Justo esto de arriba era lo que estaba buscando y parece que funciona 
tal como quería.

Muchsimasss grcia Oswaldo!!!





Un Saludo



Un saludo Igualmente!



[1] 
[2] 


___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] borde de celda wx grid

2011-02-14 Por tema Oswaldo Hernández

El 14/02/2011 17:03, damufo escribió:
...

Haciendo alguna prueba he descubierto un truco que en principio parece
que funciona, pero si utilizas, hazlo con precaución, ya que no lo he
visto documentado en ningún sitio y desconozco si puede tener algún
efecto secundario:

class CellRenderer(Grid.PyGridCellRenderer):
def Draw(self, grid, attr, dc, rect, row, col, isSelected):
# ejecuar renderizador de strings
Grid.GridCellStringRenderer().Draw(grid, attr, dc, rect, row, col,
isSelected)
# Agregar parte personalizada
dc.SetPen( wx.Pen(wx.Colour( 255, 0, 0 ) , 1, wx.SOLID))
dc.DrawLine( rect.x + rect.width-1, rect.y, rect.x + rect.width-1,
rect.y + rect.height)
...


Justo esto de arriba era lo que estaba buscando y parece que funciona
tal como quería.


Como no estaba del todo seguro sobre la "legalidad" de usar de esta 
forma el renderizador he hecho una consulta y esta ha sido la respuesta:


I think that in this case it is probably alright since creating a new 
instance of the renderer is fairly lightweight and doesn't create any UI 
objects.


Robin Dunn
Software Craftsman
http://wxPython.org



--
Oswaldo Hernández
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Python majibu

2011-02-14 Por tema joe di castro
Felicidades a vosotros por el nivel que se ve en algunas respuestas...
es un placer compartir la herramienta con vosotros, que no os quepa
duda...

Después de tener el proyecto anterior moribundo durante más de tres
años, es la primera vez que le veo utilidad real a estar pagando el
hosting (a parte de las cuentas de correo propias que uso a nivel
personal/profesional). La verdad es que no me arrepiento de nada el
haberle dado el carpetazo a deaparatos.com y apostar fuerte por este
nuevo sitio. Simplemente no quería arriesgarme a que el proyecto
anterior lastrara en rendimiento a majibu (compartían plan), por eso le
di cerrojazo rápido. El proyecto anterior era un proyecto personal y mal
enfocado, este es un proyecto comunitario y en el que seremos todos los
que decidiremos su rumbo. Siento que no hago esto por mí, lo hago para
todos, y eso lo hace mucho más llevadero.

Al final acabaré de aprendiendo Python de una vez por todas, y en el
camino aprenderemos todos un poco más unos de otros y ayudaremos a
cohesionar un poco más la comunidad Python en español (a veces envidio
la organización que tienen en otros sitios). 

Saludos

El dom, 13-02-2011 a las 19:20 +, Juan Ignacio escribió:
> Felicidades por el pedazo de trabajo que te estás pegando, es alucinante!
> 
> 2011/2/12 joe di castro :
> > Ya está terminada y disponible para todo aquel que quiera emplearlo, la
> > traducción al español al 100% y el tema de la página. Así cualquiera que
> > quiera montarse un sitio basado en OSQA tiene ya el trabajo más pesado
> > hecho. El tema no lleva copyright ni nada parecido al pie de la página,
> > con el fichero de la licencia con mi nombre, me llega. Eso si, si usáis
> > el tema, podéis cambiar algo los colores... :) y si no lo hacéis tampoco
> > pasa nada... :)
> >
> > El repositorio:
> >
> > https://bitbucket.org/joedicastro/majibu/src
> >
> >
> > Puede que alguno de vosotros haya experimentado microcortes de 2-3
> > segundos al navegar por el sitio entre ayer y hoy, era culpa mía, que
> > estaba realizando pruebas sin poner el sitio en modo mantenimiento.
> > Preferí esos microcortes a dejar el sitio tanto tiempo parado. Ya no
> > serán más necesarios, disculpad si a alguno os ha importunado esto.
> >
> > Saludos
> > joe
> >
> > P.D: Al fin he finalizado con la instalación y puesta en marcha... ahora
> > a disfrutarlo...
> >
> > ___
> > Python-es mailing list
> > Python-es@python.org
> > http://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
> >
> 
> 
> 


___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Python majibu

2011-02-14 Por tema Ángel Luis García García
Hola joe y a todos los pythonistas. Yo también me sumo a darte la
enhorabuena por este genial sitio que has creado. De verdad que ha sido todo
un éxito, y te felicito por ello. Da gusto ver a gente que se involucra por
el bien común, y eso es de agradecer. Al final todos acabaremos aprendiendo
de todos, que ahí es donde está lo bueno que has creado y que tanto va a
reportar en el futuro... El tiempo pone a cada web en su sitio, y la tuya va
predestinada a ser un *Python nest*.

Un cordial saludo.
Ángel Luis.
http://elviajedelnavegante.blogspot.com

El 14 de febrero de 2011 19:33, joe di castro  escribió:

> Felicidades a vosotros por el nivel que se ve en algunas respuestas...
> es un placer compartir la herramienta con vosotros, que no os quepa
> duda...
>
> Después de tener el proyecto anterior moribundo durante más de tres
> años, es la primera vez que le veo utilidad real a estar pagando el
> hosting (a parte de las cuentas de correo propias que uso a nivel
> personal/profesional). La verdad es que no me arrepiento de nada el
> haberle dado el carpetazo a deaparatos.com y apostar fuerte por este
> nuevo sitio. Simplemente no quería arriesgarme a que el proyecto
> anterior lastrara en rendimiento a majibu (compartían plan), por eso le
> di cerrojazo rápido. El proyecto anterior era un proyecto personal y mal
> enfocado, este es un proyecto comunitario y en el que seremos todos los
> que decidiremos su rumbo. Siento que no hago esto por mí, lo hago para
> todos, y eso lo hace mucho más llevadero.
>
> Al final acabaré de aprendiendo Python de una vez por todas, y en el
> camino aprenderemos todos un poco más unos de otros y ayudaremos a
> cohesionar un poco más la comunidad Python en español (a veces envidio
> la organización que tienen en otros sitios).
>
> Saludos
>
> El dom, 13-02-2011 a las 19:20 +, Juan Ignacio escribió:
> > Felicidades por el pedazo de trabajo que te estás pegando, es alucinante!
> >
> > 2011/2/12 joe di castro :
> > > Ya está terminada y disponible para todo aquel que quiera emplearlo, la
> > > traducción al español al 100% y el tema de la página. Así cualquiera
> que
> > > quiera montarse un sitio basado en OSQA tiene ya el trabajo más pesado
> > > hecho. El tema no lleva copyright ni nada parecido al pie de la página,
> > > con el fichero de la licencia con mi nombre, me llega. Eso si, si usáis
> > > el tema, podéis cambiar algo los colores... :) y si no lo hacéis
> tampoco
> > > pasa nada... :)
> > >
> > > El repositorio:
> > >
> > > https://bitbucket.org/joedicastro/majibu/src
> > >
> > >
> > > Puede que alguno de vosotros haya experimentado microcortes de 2-3
> > > segundos al navegar por el sitio entre ayer y hoy, era culpa mía, que
> > > estaba realizando pruebas sin poner el sitio en modo mantenimiento.
> > > Preferí esos microcortes a dejar el sitio tanto tiempo parado. Ya no
> > > serán más necesarios, disculpad si a alguno os ha importunado esto.
> > >
> > > Saludos
> > > joe
> > >
> > > P.D: Al fin he finalizado con la instalación y puesta en marcha...
> ahora
> > > a disfrutarlo...
> > >
> > > ___
> > > Python-es mailing list
> > > Python-es@python.org
> > > http://mail.python.org/mailman/listinfo/python-es
> > > FAQ: http://python-es-faq.wikidot.com/
> > >
> >
> >
> >
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>



-- 
Ángel Luis García García
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] borde de celda wx grid

2011-02-14 Por tema damufo

Hola:


En 2011/02/14 19:25, Oswaldo Hernández escribiu:

El 14/02/2011 17:03, damufo escribió:
...

Haciendo alguna prueba he descubierto un truco que en principio parece
que funciona, pero si utilizas, hazlo con precaución, ya que no lo he
visto documentado en ningún sitio y desconozco si puede tener algún
efecto secundario:

class CellRenderer(Grid.PyGridCellRenderer):
def Draw(self, grid, attr, dc, rect, row, col, isSelected):
# ejecuar renderizador de strings
Grid.GridCellStringRenderer().Draw(grid, attr, dc, rect, row, col,
isSelected)
# Agregar parte personalizada
dc.SetPen( wx.Pen(wx.Colour( 255, 0, 0 ) , 1, wx.SOLID))
dc.DrawLine( rect.x + rect.width-1, rect.y, rect.x + rect.width-1,
rect.y + rect.height)
...


Justo esto de arriba era lo que estaba buscando y parece que funciona
tal como quería.


Como no estaba del todo seguro sobre la "legalidad" de usar de esta 
forma el renderizador he hecho una consulta y esta ha sido la respuesta:


I think that in this case it is probably alright since creating a new 
instance of the renderer is fairly lightweight and doesn't create any 
UI objects.


Robin Dunn
Software Craftsman
http://wxPython.org

Mi inglés no sea muy bueno que se diga, pero si no entiendo mal es 
correcta tú solución.

Con nueva instancia supongo que se refiere a esta línea:
Grid.GridCellStringRenderer().Draw(grid, attr, dc, rect, row, col,
isSelected)
Por favor, corrígeme si me equivoco.


Saludos y gracias.
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/