• Publicidad

Perl/TK (ToolKit GUI) Instalación y Ejemplos #1

Aprende Perl

Perl/TK (ToolKit GUI) Instalación y Ejemplos #1

Notapor TKZeXe » 2009-10-19 14:29 @645

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.


Sintáxis: [ Descargar ] [ Ocultar ]
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;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Tk;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $mw = MainWindow->new;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$mw->title("Hello World");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$mw->Button(-text => "Salir del Programa!", -command => sub { exit })->pack;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


* 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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
MainLoop;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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:

Sintáxis: [ Descargar ] [ Ocultar ]
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.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Bueno, analicemos lo que no hemos aprendido:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
require Tk::BrowseEntry;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

Sintáxis: [ Descargar ] [ Ocultar ]
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');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


* 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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$mw->Button(-text => $oDespedida,
            -command =>\&salir)->pack(-side => 'bottom',
                                            -expand => 1,
                                            -fill => 'x');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



* 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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$lb = $mw->Scrolled("Listbox", -scrollbars => "e",
                    -selectmode => "single")->pack( );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


* 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.


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$lb->insert('end', qw/red yellow green blue grey magenta gold brown darkblue darkred black/);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $lb->bind('<Button-1>',\&change );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


* 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().

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub change{ $lb->configure(-background =>
                             $lb->get($lb->curselection( )) );
              }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


* 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.
Última edición por explorer el 2009-10-20 11:32 @522, editado 2 veces en total
Razón: Correciones múltiples
Imagen
GUI ADM PERL
TKZeXe
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2009-10-19 08:50 @409

Publicidad

Re: Perl/TK (ToolKit GUI) Instalación y Ejemplos #1

Notapor HeLl-Tab0 » 2009-12-14 01:51 @119

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? :? :? :?
Avatar de Usuario
HeLl-Tab0
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2009-12-14 01:34 @107
Ubicación: En algun lugar donde la oscuridad y mi amor sea perfecto

Re: Perl/TK (ToolKit GUI) Instalación y Ejemplos #1

Notapor explorer » 2009-12-14 03:46 @198

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl/TK (ToolKit GUI) Instalación y Ejemplos #1

Notapor HeLl-Tab0 » 2009-12-14 10:54 @496

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:
Avatar de Usuario
HeLl-Tab0
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2009-12-14 01:34 @107
Ubicación: En algun lugar donde la oscuridad y mi amor sea perfecto

Re: Perl/TK (ToolKit GUI) Instalación y Ejemplos #1

Notapor TKZeXe » 2010-01-05 14:34 @648

Moleste todo lo que quiera ;)
Imagen
GUI ADM PERL
TKZeXe
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2009-10-19 08:50 @409


Volver a Formación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados