[Perl] Perl y Windows, Dolor de cabeza.
Gunnar Wolf
gwolf en gwolf.cx
Mie Jun 9 12:54:13 CDT 2004
Rafael F. Rodríguez dijo [Wed, Jun 09, 2004 at 01:00:16PM +0200]:
> Pues eso, ya tengo algunos scripts para ejecutar en windows y que actualiza
> algunas bases de datos, lo que ocurre es que todo me sale en pantalla de DOS,
> me gustaría saber como puedo hacer que salga una venta que diga "YA TA" y ok.
>
> He buscado información sobre programación de ventanas en perl y la verdad, me
> parece un parto, y cada vez que me pongo me dá dolor de cabeza, ¿algun manual
> en español donde lo explique de forma más o menos sencilla?.
Hola,
Veo que mi respuesta no será la primera, pero bueno... Lo que yo te
sugiero es utilizar la biblioteca de Tk para manejar tu interfaz
gráfica, principalmente por ser la más portable que conozco. Claro, he
de aclarar que yo usé por única vez a Tk hace unos 4 años (cuando Qt
no era del todo libre y Gtk para Perl aún no estaba maduro, antes de
haber siquiera escuchado nombrar a wxwidgets, obviamente antes de que
Glade fuera usable, y demás avances en ese campo)... Pero entiendo que
sigue siendo lo mejor si piensas en portabilidad y facilidad de
instalación. Ah, y la documentación es muy comprehensiva.
Tomé este ejemplito casi directamente de la documentación, de la
página de manual Tk::UserGuide:
----------------------------------------
#!/usr/bin/perl
use Tk;
use strict;
my $main = MainWindow->new();
if (my $error = realizaProceso()) {
# Alguna falla - La reportamos
$main->Label(-text => 'Error!',
-foreground => 'red')->pack;
$main->Label(-text => $error)->pack;
$main->Button(-text => 'Chale...',
-command => [$main => 'destroy'])->pack;
} else {
# Éxito
$main->Label(-text => 'Listo, el proceso concluyó con éxito')->pack;
$main->Button(-text => 'Ok!',
-command => [$main=>'destroy'])->pack;
}
MainLoop;
sub realizaProceso {
my $ret = rand();
if ($ret >= 0.5) {
# Ejecución exitosa
return 0;
} else {
# Error
return "Error: $ret!";
}
}
----------------------------------------
Te explico rápidamente los pasos. Primero que nada, creamos en $main
nuestra ventana principal, la representante del GUI entero, con
MainWindow->new. A continuación, realizamos el proceso que
requieras. Supongamos que el proceso te regresa un valor falso (en
este caso, 0) si es exitoso, y la descripción del error en caso de
falla. En caso de error, le pegamos a $main una etiqueta roja con la
leyenda 'Error' y una etiqueta con el color default (típicamente
negro) describiendo el error, seguidos del botón para cerrar el
programa. ¿Por qué a los label y button sigue un '->pack'? Porque es
uno de los métodos para 'pintarlo' en la ventana (no entro en
detalles, asómate a la documentación). En caso de éxito, sólo notifico
que todo está bien. Por último, llamo a MainLoop - una función que Tk
exporta a tu espacio de nombres que le indica que levante la interfaz,
y que se encargue del manejo de eventos.
Sí, esto es muy diferente de programar con Visual*, pero bueno... Para
interfaces sencillitas como esta, es incluso más simple. Para
interfaces complejas... Bueno, ¿qué te digo? Yo alguna vez colaboré en
un equipo que lo hizo completamente a mano... Hoy en día,
probablemente te sugeriría utilizar una herramienta gráfica como
Glade.
Saludos,
--
Gunnar Wolf - gwolf en gwolf.cx - (+52-55)5630-9700 ext. 1366
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF
Más información sobre la lista de distribución Perl