<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p>Perfecto, Joaquín</p>
<p>Saludos y gracias<br>
</p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<hr tabindex="-1" style="width: 98%; display: inline-block;">
<div id="divRplyFwdMsg" dir="ltr"><font color="#000000" face="Calibri, sans-serif" style="font-size: 11pt;"><b>De:</b> gvsig_usuarios-bounces@listserv.gva.es &lt;gvsig_usuarios-bounces@listserv.gva.es&gt; en nombre de Joaquin Jose del Cerro Murciano &lt;jjdelcerro@gvsig.org&gt;<br>
<b>Enviado:</b> lunes, 3 de julio de 2017 9:41<br>
<b>Para:</b> Lista de Usuarios de gvSIG<br>
<b>Asunto:</b> Re: [Gvsig_usuarios] Barra de progreso en un script</font>
<div>&nbsp;</div>
</div>
<div>
<div dir="ltr"><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">El 3 de julio de 2017, 9:01, Ovidio Ribeira <span dir="ltr">
&lt;<a href="mailto:alboredos@hotmail.es" target="_blank">alboredos@hotmail.es</a>&gt;</span> escribió:<br>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;">
<div dir="ltr">
<div id="gmail-m_5483143741675097015divtagdefaultwrapper" style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;" dir="ltr">
<p>Buenos dia Joaquín, gracias por tu ayuda.</p>
<p>Probe lo que me dijiste pero la barra de estada no se&nbsp;&quot;mueve&quot; durante el proceso,&nbsp; si que&nbsp;aparece completa al terminarlo, y por la consola si&nbsp;que se va incrementando&nbsp;el contador de las iteraciones,&nbsp;la base del script es la siguiente:</p>
<p>&nbsp;</p>
</div>
</div>
</blockquote>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;">
<div dir="ltr">
<div id="gmail-m_5483143741675097015divtagdefaultwrapper" style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;" dir="ltr">
<p># encoding: utf-8</p>
<p>import gvsig<br>
from gvsig import *<br>
from gvsig.libs.formpanel import FormPanel<br>
from gvsig.libs.formpanel import *<br>
import os</p>
<p>class BarraEstado(FormPanel):</p>
<p>&nbsp;&nbsp;&nbsp; def __init__(self):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FormPanel.__init__(self,os.<wbr>path.join(os.path.dirname(__<wbr>file__),&quot;lista.xml&quot;))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.setPreferredSize(290,200) #tamaño</p>
<p>&nbsp;&nbsp;&nbsp; def Sair_click(self,*args):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.hide()</p>
<p>&nbsp;&nbsp;&nbsp; def Procesar_click(self,*args):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; features = gvsig.currentLayer().features(<wbr>)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.BarraEstado.setMaximum(<wbr>features.getSize())<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.BarraEstado.<wbr>setIndeterminate(False)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count = 0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.BarraEstado.setValue(<wbr>count)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for f in features:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.BarraEstado.setValue(<wbr>count)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clave1 = f.PARCELA_RV<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.clave.setText( str(int(clave1)))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print count<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print clave1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count=count&#43;1<br>
def main(*args):</p>
<p>&nbsp;&nbsp;&nbsp; l = BarraEstado()<br>
&nbsp;&nbsp;&nbsp; l.showTool(u&quot;Xestión&quot;)#Remove this lines and add here your code</p>
<p><br>
</p>
<p></p>
<p>En la etiqueta también solo muestra la última y al final del proceso, ¿Que estoy haciendo mal?</p>
</div>
</div>
</blockquote>
<div><br>
<br>
Perdona, se me olvido ese detalle, muy rapido conteste.<br>
<br>
Hay un problema de hilos de ejecucion.<br>
Para explicarlo de forma simple, serial algo como que todas las cosas de swing se ejecutan en un mismo hilo de ejecucion, incluidos los venetos. Y ese hilo lo tienes pillado haciendo tu proceso. Asi que aunque actualizas controles graficos estos no se refrescan
 hasta que termina el proceso y el hilo de swing vuelva a poder refrescar los controles graficos. Momento en que se ejecutan todas las actualizaciones de golpe y te aparece la barra ya al final. Si tu proceso se ejecutase en otro hilo de ejecucion distinto
 al de swing, este estaria libre para atender las peticiones que actualizacion de controles graficos y podria ir actualizandose los controles conforme se vayan precisando (esto puedo causar otros problemas, pero para lo que vas a realizar en tu proceso y en
 general para lo que se suele hacer desde scripting lo vamos a oviar). <br>
<br>
Commo eso ya se me dio en algun otro momento, añadi algo de api del FormPanel para poder tratarlo de forma simple.<br>
Prueba a añadir la linea<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.Procesar_click.setSynchronous(False)<br>
<br>
Al final del metodo __init__.<br>
<br>
Es un pequeño hack del FormPanel para indicar que ese evento se ejecute de forma asincrona, en otro hilo de ejecucion. El ya se encargara de contruir otro hilo de ejecucion y ejecutar tu evento en el.<br>
Ya me comentas si asi te funciona.<br>
<br>
Un saludo<br>
Joaquin<br>
<br>
&nbsp;<br>
<br>
&nbsp;</div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;">
<div dir="ltr">
<div id="gmail-m_5483143741675097015divtagdefaultwrapper" style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;" dir="ltr">
<p>Saludos y gracias</p>
<p>Ovidio</p>
<p><br>
</p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<hr style="width: 98%; display: inline-block;">
<div id="gmail-m_5483143741675097015divRplyFwdMsg" dir="ltr"><font color="#000000" face="Calibri, sans-serif" style="font-size: 11pt;"><b>De:</b>
<a href="mailto:gvsig_usuarios-bounces@listserv.gva.es" target="_blank">gvsig_usuarios-bounces@<wbr>listserv.gva.es</a> &lt;<a href="mailto:gvsig_usuarios-bounces@listserv.gva.es" target="_blank">gvsig_usuarios-bounces@<wbr>listserv.gva.es</a>&gt; en nombre de Joaquin
 Jose del Cerro Murciano &lt;<a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a>&gt;<br>
<b>Enviado:</b> viernes, 30 de junio de 2017 12:14<br>
<b>Para:</b> Lista de Usuarios de gvSIG<br>
<b>Asunto:</b> Re: [Gvsig_usuarios] Barra de progreso en un script</font>
<div>&nbsp;</div>
</div>
<div>
<div class="gmail-h5">
<div>
<div dir="ltr"><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">El 30 de junio de 2017, 10:57, Ovidio Ribeira <span dir="ltr">
&lt;<a href="mailto:alboredos@hotmail.es" target="_blank">alboredos@hotmail.es</a>&gt;</span> escribió:<br>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;">
<div dir="ltr">
<div id="gmail-m_5483143741675097015gmail-m_-5961406484098671439divtagdefaultwrapper" style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;" dir="ltr">
<p>Tengo un script con una interfaz grafica creada con Abeille, pero no sé como se puede integrar una barra de estado con el proceso de iteración sobre una capa, se agradece la ayuda.</p>
<p></p>
</div>
</div>
</blockquote>
<div><br>
Hola.<br>
<br>
Asi, muy rapido, sin pensarlo mucho y sin probar lo que te pongo aqui, solo a modo de idea...<br>
<br>
En abeille tiene un componenten JProgressbar en la toolbar de componentes.<br>
Es un componente standard de swing, su javadoc puedes encontrarlo en<br>
<br>
&nbsp; <a href="https://docs.oracle.com/javase/7/docs/api/javax/swing/JProgressBar.html" target="_blank">
https://docs.oracle.com/<wbr>javase/7/docs/api/javax/swing/<wbr>JProgressBar.html</a><br>
<br>
Prueba a meterlo en tu formulario, y luego solo tienes que usarlo desde tu script.<br>
Tiene dos o tres metodos interesantes. Aqui te dejo un pequeño caso de uso:<br>
<br>
&nbsp; features = gvsig.currentLayer().features(<wbr>)<br>
<br>
&nbsp; self.pgbProgreso.setMaximum(<wbr>features.getSize())<br>
&nbsp; self.pgbProgreso.<wbr>setIndeterminate(False)<br>
&nbsp; count = 0<br>
&nbsp; for f in features:<br>
&nbsp;&nbsp;&nbsp; self.pgbProgreso.setValue(<wbr>count)<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; # Ahora hacemos lo que sea que haya que hacer con la feature.<br>
&nbsp;&nbsp;&nbsp; procesar(f) <br>
<br>
&nbsp;&nbsp;&nbsp; count &#43;= 1<br>
<br>
Puedes añadir alguna etiqueta mas en el forlario y vas añadiendo en ella informacion sobre lo que vas haciendo.<br>
Ten cuidado de no actualizar etiquetas del formulario a lo bestia, por ejemplo en cada iteracion sobre una capa<br>
gigantesca, eso puede relentizar el proceso.<br>
<br>
Espero que sirva.<br>
<br>
Un saludo<br>
Joaquin<br>
<br>
<br>
&nbsp;</div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;">
<div dir="ltr">
<div id="gmail-m_5483143741675097015gmail-m_-5961406484098671439divtagdefaultwrapper" style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;" dir="ltr">
<p>Gracias y Saludos<br>
</p>
</div>
</div>
<br>
______________________________<wbr>_________________<br>
gvSIG_usuarios mailing list<br>
<a href="mailto:gvSIG_usuarios@listserv.gva.es" target="_blank">gvSIG_usuarios@listserv.gva.es</a><br>
<br>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:<br>
<br>
<a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios" target="_blank" rel="noreferrer">https://listserv.gva.es/cgi-bi<wbr>n/mailman/listinfo/gvsig_usuar<wbr>ios</a><br>
<br>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
<div class="gmail-m_5483143741675097015gmail_signature">------------------------------<wbr>--------<br>
Joaquin Jose del Cerro Murciano<br>
Development and software arquitecture manager at gvSIG Team<br>
<a href="mailto:jjdelcerro@gvsig.com" target="_blank">jjdelcerro@gvsig.com</a><br>
<a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a><br>
gvSIG Association<br>
<a href="http://www.gvsig.com" target="_blank">www.gvsig.com</a><br>
<a href="http://www.gvsig.org" target="_blank">www.gvsig.org</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
______________________________<wbr>_________________<br>
gvSIG_usuarios mailing list<br>
<a href="mailto:gvSIG_usuarios@listserv.gva.es">gvSIG_usuarios@listserv.gva.es</a><br>
<br>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:<br>
<br>
<a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios" target="_blank" rel="noreferrer">https://listserv.gva.es/cgi-<wbr>bin/mailman/listinfo/gvsig_<wbr>usuarios</a><br>
<br>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
<div class="gmail_signature">--------------------------------------<br>
Joaquin Jose del Cerro Murciano<br>
Development and software arquitecture manager at gvSIG Team<br>
<a href="mailto:jjdelcerro@gvsig.com" target="_blank">jjdelcerro@gvsig.com</a><br>
<a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a><br>
gvSIG Association<br>
<a href="http://www.gvsig.com" target="_blank">www.gvsig.com</a><br>
<a href="http://www.gvsig.org" target="_blank">www.gvsig.org</a></div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>