Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Formación » Perl/TK (ToolKit GUI) Instalación y Ejemplos #1 Responder al tema
Nuevo tema


Página 1 de 1  [ 5 mensajes ] 
 
Nota 2009-10-19 14:29 @645

Perlero Nuevo
Registrado: 2009-10-19 08:50 @409
Mensajes: 18
Perl/TK (ToolKit GUI) Instalación y Ejemplos #1
Sección GUI
Uso del módulo PERL/TK Básico (Instalación y Ejemplo).

Perl/Tk es un módulo de Perl para la creación de elementos gráficos.

Con pocos esfuerzo los programas GUI pueden trabajar a través de Windows y en plataformas Unix.

Los elementos se basan en componentes(Ventanas,Frames) y widgets(TexBox,ListBox,Label,etc).

Esto nace ya que la mayoría del código Perl que utilizamos se basa en la escritura en interfaces a través de código, con esto el usuario final podrá interactuar con Perl a través de botones, textos y ventanas armoniosas.


En Windows con Activestate viene por defecto instalado, sino solo tienen que buscar en el repositorio (ppm o cpan) por "TK".

* para ver si lo tenemos instalado solo basta poner en MSDOS Windows:

perl -e "use Tk"

P.D.: si nos arroja una excepción debemos instalar el módulo.

* para ver nuestra versión de Tk, pon el siguiente comando:

perl -MTk -e "print $Tk::VERSION"

P.D.: lo ideal es tener la versión 800.022 en adelante.

Imagen

Bueno, mostraremos el mítico "Hola Mundo" e iremos explicando línea por línea.


Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Tk;
  3. my $mw = MainWindow->new;
  4. $mw->title("Hello World");
  5. $mw->Button(-text => "Salir del Programa!", -command => sub { exit })->pack;
  6. MainLoop;



Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
use Tk;


* Con esto llamamos a la librería TK; no hay mucho que explicar.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
my $mw = MainWindow->new;


* En esta línea creamos la ventana (o una instancia de ella). Tendrá la misma decoración que el resto de las ventanas.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
$mw->title("Hello World");


* Aquí le pasamos a la función title() del objeto MainWindow como parámetro el título de la ventana.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
$mw->Button(-text => "Salir del Programa!", -command => sub { exit })->pack;


* en esta línea agregamos al objeto $mw el widget button y su respectiva configuración.

Como vemos, esta configuración del botón se pasa como argumento y al final se ejecuta el comando
pack(); para poder ver el botón y cualquier widget este comando es sustancial.

En este ejemplo vemos dos atributos configurados:
-tex : este es el texto que tiene el botón (value en HTML)
-command: esto se ejecuta cuando damos clic encima del botón (onClick en HTML).
Más adelante veremos los tipos de eventos.

Si se fijan, es un tipo de array asociativo el que se pasa por parámetro el tipo de configuración y el valor de ésta.

También podemos pasar subrutinas como en el caso de -command que le pasamos *inline
la subrutina exit() como parámetro.

Hasta aquí va todo bien, pero hay algo curioso. Si se fijan al final de la declaración del botón
se le ejecuta otra función IMPORTANTE llamada pack(). Con ésta mostramos nuestro widget (botón, texbox, etc) y manipulamos con algunas opciones que le podemos pasar por parámetro, la relación entre ventanas, el espaciado entre widget, las posiciones y valores en la ventana y otras varias opciones; en este caso se dejó por default sin parámetros.

También podríamos instanciarla de la siguiente forma:

my $btn=$mw->Button(-text => "Salir del Programa!", -command => sub { exit });
$btn->pack();


Al igual que pack() existen otras formas de manipular los widgets como "grid" o "form"
en el orden que ejecutemos pack() irán apareciendo los widgets.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
MainLoop;


ATENCIÓN: esta es nuestra última línea de código para declarar la GUI.
Después de ésta se ejecutará código perl como subrutinas si las quisieras declarar. Todo lo que se ejecute después de esta línea no se tomará en cuenta para la interfaz.


Y así funciona nuestro primer programa Perl/Tk:

Imagen

Si has usado anteriormente VB6, Delphi for PHP, o ASP.NET, encontrarás que las propiedades de los objetos y éstos mismos son similares.

Si dominas perl Tk podrás crear interfaces para el usuario poderosas y fáciles de manipular.


Bueno, vamos a algo un poquito más elaborado:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Tk;
  3. require Tk::BrowseEntry;
  4. my $oDespedida="Adios Mundo!";
  5.  
  6. my $mw = MainWindow->new;
  7. $mw->title("Titulo Ventana");
  8. $mw->Label(-text => "Como vemos, amigos de Perl en español, esta ventana se ve más\n
  9.           agradable que la anterior ya que hemos utilizado configuraciones de pack().\n
  10.           Para darle posiciones en la ventana y ¡ordenar los widgets!",
  11.            -background => "LIGHTBLUE"
  12.            )->pack( -fill => 'x');
  13.  
  14. $mw->Button(-text => $oDespedida,
  15.             -command =>\&salir)->pack(-side => 'bottom',
  16.                                             -expand => 1,
  17.                                             -fill => 'x');
  18.  
  19. $lb = $mw->Scrolled("Listbox", -scrollbars => "e",
  20.                     -selectmode => "single")->pack( );
  21. $lb->insert('end', qw/red yellow green blue grey magenta gold brown darkblue darkred black/);
  22. $lb->bind('<Button-1>',\&change );
  23.  
  24. MainLoop;
  25.  
  26. #aquí abajo declaramos subrutinas si es necesario
  27. sub change{ $lb->configure(-background =>
  28.                              $lb->get($lb->curselection( )) );
  29.               }
  30. sub salir{
  31. print "Has salido del programa, saludos";
  32. exit;    
  33. }
  34.  


Bueno, analicemos lo que no hemos aprendido:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
require Tk::BrowseEntry;


* Aquí llamamos o incluimos la subclase BrowseEntry que nos dará todo el poder para manejar listas o listas múltiples y sus respectivas configuraciones.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
$mw->Label(-text => "Como vemos amigos de Perl en español esta ventana se ve más\n
           agradable que la anterior ya que hemos utilizado configuraciones de pack().\n
           Para darle posiciones en la ventana y ¡ordenar los widgets!."
,
           -background => "LIGHTBLUE"
           )->pack( -fill => 'x');


* En esta línea creamos un widget del tipo Label con el texto que se mostrará y un fondo azul claro. Con esto: -fill => 'x', le decimos que se extienda por todo el eje x dentro del frame o ventana que esté embebido.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
$mw->Button(-text => $oDespedida,
            -command =>\&salir)->pack(-side => 'bottom',
                                            -expand => 1,
                                            -fill => 'x');



* En esta línea: -command =>\&salir llamamos a la función salir que declaramos más abajo;
con -expand => 1 le decimos que rellene el espacio que falte para completar el espacio de la ventana o frame.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
$lb = $mw->Scrolled("Listbox", -scrollbars => "e",
                    -selectmode => "single")->pack( );


* Aquí es donde utilizamos "Tk::BrowseEntry"; creamos un listbox con un scrollbar incluido para que cuando nos pasemos del límite lo genere automáticamente; con -selectmode => "single" le decimos que solo se pueda seleccionar de a un elemento.


Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
$lb->insert('end', qw/red yellow green blue grey magenta gold brown darkblue darkred black/);


* Aquí es donde insertamos los elementos a la listbox. "end" significa justo después del último elemento.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. $lb->bind('<Button-1>',\&change );


* Esta parte es importante ya que con "bind" le incluimos un evento al widget seleccionado;
en este caso es el evento del botón 1 del mouse (clic izquierdo); al pulsarlo se llama a la función change().

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
sub change{ $lb->configure(-background =>
                             $lb->get($lb->curselection( )) );
              }


* Esta función configura o reconfigura el listbox cambiándole el fondo de color por
el que esté seleccionado actualmente (tienen que ser colores válidos, inglés, rgb).

Imagen

¡OJO! ¡¡Uso de pack() y otros!!

Hablaremos de los ADMINISTRADORES de la geometría.

Cada uno de estos muestran los widget de distinta forma o con distintas reglas.
Cambien tienen sus propios métodos para configurar las posiciones de los widgets.
Ya hemos usado uno de ellos, pack(), pero también existen otros.
Definámoslos:

*pack: La regla de este método nos dice que entre los widget no pueden sobreponerse unos con otros parcial o totalmente, o sea, nos dice que sería como un rompecabezas.
Imagen
Sus opciones (Básicas) :

-side => 'left' | 'right' | 'top' | 'bottom
Coloca el widget en contra de la parte específica de la ventana o el marco.

-fill => 'none' | 'x' | 'y'| 'both'
Rellenamos el widget en la dirección especificada.

-expand => 1 | 0
Rellena el espacio restante en el frame o ventana así se acomoda.

-anchor => 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w' | 'nw' | 'center'
Ancla el widget dentro del rectángulo de asignación.

-after => $otherwidget
Muestra el widget después del widget pasado como variable.

-before => $otherwidget
Muestra el widget antes del widget pasado como variable.

*grid: Se divide la ventana en un grid compuesto por columnas y filas (0,0).
Imagen
Sus opciones (Básicas) :

"-"
Un carácter especial que se utiliza en la lista de widget del grid. Aumenta ColumnSpan del widget antes en la lista de widgets.

"x"
Un carácter especial que se utiliza en la lista de widget del grid. Deja un espacio en blanco en la cuadrícula.

"^"
Un carácter especial que se utiliza en la lista de widget de la red. Aumenta rowspan del widget en el grid directamente sobre ella.

-column => n
Establece la columna (mayor que 0).

-row => m
Establece la fila (mayor que 0).

-columnspan => n
Establece el número de columnas a abarcar (colspan de HTML).

-rowspan => m
Establece el número de filas a abarcar (rowspan de HTML).

*place: Está permitido la superposicion de widgets, y se basa en coordenadas
relativas del eje X e Y.
Imagen
Sus opciones (Básicas) :

-anchor => 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w' | 'nw' | 'center'
La misma que pack().

-bordermode => 'inside' | 'outside' | 'ignore'
Determina si la parte frontera está incluida en la coordenada.

-height => amount
Define la altura absoluta del widget.

-width => amount
Define el ancho absoluto del widget.

-x => x
Indica la distancia que se pondrá el widget en el eje x.

-y => y
Indica la distancia que se pondrá el widget en el eje y.



Por ahora andamos bien. FELICIDADES, faltarían un par de ejemplos más y ya podríamos combinar lo aprendido con una base de datos MSSQL, MYSQL, Oracle u otras.

Les recomiendo un libro de referencia como Perl/Tk de O'Reilly (quick o full) para que vayan viendo las demás opciones.

En todo caso, cualquier duda, me consultan.

Estaré haciendo el tutorial para crear algo con una base de datos Mysql y más ejemplos.

_________________
Imagen
GUI ADM PERL


Última edición por explorer el 2009-10-20 11:32 @522, editado 2 veces en total
Correciones múltiples


Nota 2009-12-14 01:51 @119
Avatar de Usuario
Perlero Nuevo
Registrado: 2009-12-14 01:34 @107
Ubicación: En algun lugar donde la oscuridad y mi amor sea perfecto
Mensajes: 2
Re: Perl/TK (ToolKit GUI) Instalación y Ejemplos #1
Hola. Oye: pues la verdad, yo soy nuevo en Perl y pues me interesa; quiero aprender y pues yo ya instalé el Perl y pues no sé con qué escribir el código en una libreta de notas o dónde o qué, porque lo hice en gedit y lo guardé en usr/bin y me dice que no tengo los permisos. ¿Qué puedo hacer? :? :? :?


Nota 2009-12-14 03:46 @198
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10268
Re: Perl/TK (ToolKit GUI) Instalación y Ejemplos #1
Bienvenido a los foros de Perl en Español, HeLl-Tab0.

Puedes editar los ficheros Perl en cualquier editor de textos o usar alguno de los muchos editores específicos que hay para Perl. El más moderno es Padre, aunque puede, en alguna situación, ser complicado de instalar.

El lugar donde debes dejar los programas es en cualquiera donde tengas permisos de escritura, y, preferiblemente, estén presentes en la variable $PATH.

Es normal que el sistema no te deje instalarlo en /usr/bin/, porque lo estarás intentando como usuario normal. Deberás cambiar a root para poder hacerlo. Y luego darle permisos de ejecución para todos los usuarios que quieras que lo ejecuten.

Si deseas hacerlo lo más sencillo posible, puedes colocarles en el mismo directorio del usuario con que entras en el sistema. Luego, puedes ejecutarlo con

perl programa.pl

o también puedes intentar a darle permisos de ejecución:

chmod +x programa.pl

y ya puedes probar a ejecutarlo de forma directa:

./programa.pl

_________________
JF^D Perl programming


Nota 2009-12-14 10:54 @496
Avatar de Usuario
Perlero Nuevo
Registrado: 2009-12-14 01:34 @107
Ubicación: En algun lugar donde la oscuridad y mi amor sea perfecto
Mensajes: 2
Re: Perl/TK (ToolKit GUI) Instalación y Ejemplos #1
Oye, muchas gracias por contestarme. La verdad me ayudó mucho lo que me dijiste y de nuevo gracias; y voy a seguir probando más el Perl. Se te agradece un buen :D :D :D :D y cualquier cosa pues voy a estar molestándote :lol: :wink: :lol: :lol:


Nota 2010-01-05 14:34 @648

Perlero Nuevo
Registrado: 2009-10-19 08:50 @409
Mensajes: 18
Re: Perl/TK (ToolKit GUI) Instalación y Ejemplos #1
Moleste todo lo que quiera ;)

_________________
Imagen
GUI ADM PERL


Responder al tema  [ 5 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO