Y mostrando datos con interfaz gráfica (GUI).
El ejemplo es bien trivial pero nos ayudará para empezar a jugar con los datos y manipularlos
Con Perl/TK.
Como siempre, mostraremos el código entero y después explicaremos línea por línea.
Se debe manejar al menos el mínimo conocimiento de Perl CLI para absorber de mejor forma los conocimientos.
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use Tk;
- use DBI;
- use strict;
- my $host = "localhost";
- my $database="test";
- my $user = "root";
- my $pw = "28alonso28";
- my $oConexInf="DBI:mysql:database=$database;$host:3306";
- my $connect=DBI->connect($oConexInf,$user,$pw);
- my $mw = MainWindow->new();
- $mw->title("Scrollbar/Con BDD");
- $mw->geometry('410x100');
- $mw->resizable(0, 0);
- $mw->Button(-text => " SALIR ",
- -command => sub { exit })->pack(-side => 'bottom');
- my $scroll = $mw->Scrollbar( );
- # ARRAY con 3 listbox
- my $listboxes = [ $mw->Listbox(), $mw->Listbox(), $mw->Listbox( ) ];
- # Configura cada cuadro de lista
- foreach my $list (@$listboxes) {
- $list->configure(-yscrollcommand => [ \&scroll_listboxes, $scroll,
- $list, $listboxes ],-height=>"5",-selectforeground=>"red",-selectmode=>"multiple");
- }
- # Configure the Scrollbar to scroll each Listbox
- $scroll->configure(-command => sub { foreach my $list (@$listboxes) {
- $list->yview(@_);
- }});
- # usamos pack() en la barra de desplazamiento y la listbox
- $scroll->pack(-side => 'left', -fill => 'y');
- #ponemos los nombres de las columnas
- @$listboxes[0]->pack(-side => 'left');
- @$listboxes[0]->insert('0',"ID");
- @$listboxes[1]->pack(-side => 'left');
- @$listboxes[1]->insert('0',"PRECIO");
- @$listboxes[2]->pack(-side => 'left');
- @$listboxes[2]->insert('0',"NOMBRE");
- #
- my $query="SELECT ID,Precio,Nombre from Productos ";
- my $sth = $connect->prepare($query);
- $sth->execute();
- while(my @fila=$sth->fetchrow_array())
- {
- @$listboxes[0]->pack(-side => 'left');
- @$listboxes[0]->insert('end',$fila[0]);
- @$listboxes[1]->pack(-side => 'left');
- @$listboxes[1]->insert('end',$fila[1]);
- @$listboxes[2]->pack(-side => 'left');
- @$listboxes[2]->insert('end',$fila[2]);
- }
- MainLoop;
- # Este método se llama cuando un cuadro de lista se desplaza con el teclado
- # Hace que la barra de desplazamiento de reflejar el cambio, y se desplaza las otras listas
- sub scroll_listboxes {
- my ($sb, $scrolled, $lbs, @args) = @_;
- $sb->set(@args); # Llama a la barra de desplazamiento
- my ($top, $bottom) = $scrolled->yview( );
- foreach my $list (@$lbs) {
- $list->yviewMoveto($top); # ajusta cada lb
- }
- }
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use Tk;
- use DBI;
- use strict;
- my $host = "localhost";
- my $database="test";
- my $user = "root";
- my $pw = "28alonso28";
- my $oConexInf="DBI:mysql:database=$database;$host:3306";
- my $connect=DBI->connect($oConexInf,$user,$pw);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* En estas líneas llamamos a la librería Tk a la de Mysql (La pueden instalar de CPAN o PPM, super sencillo) y posteriormente nos conectamos a la base de datos.
Using perl Syntax Highlighting
- $mw = MainWindow->new();
- $mw->title("Scrollbar/Con BDD By TKZeXe");
- $mw->geometry('410x100');
- $mw->resizable(0, 0);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* ¡Ojo!, aquí, aparte de crear una instancia de la ventana (la cual contendrá nuestros widgets) ¡¡estamos configurándola!! Le damos una altura y ancho, también le decimos que ni el eje "x" ni "y" serán resizables (ponemos valor 1 si queremos activarlo).
Using perl Syntax Highlighting
- $mw->Button(-text => " SALIR ",
- -command => sub { exit })->pack(-side => 'bottom');
- $scroll = $mw->Scrollbar( );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* Aquí creamos un widget botón alineado hacia la parte inferior y al hacerle clic ejecuta la función exit() (salir del programa). ¡También creamos una nueva instancia del widget Scrollbar!
Using perl Syntax Highlighting
- $listboxes = [ $mw->Listbox(), $mw->Listbox(), $mw->Listbox( ) ];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* Almacenamos en un array la cantidad de instancias de Listbox que necesitemos (en este caso solo 3)
Using perl Syntax Highlighting
- foreach $list (@$listboxes) {
- $list->configure(-yscrollcommand => [ \&scroll_listboxes, $scroll,
- $list, $listboxes ],-height=>"5");
- }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* Recorremos las ListBox anteriormente creadas y vamos configurándolas, con -yscrollcommand
le asignamos una barra de desplazamiento vertical y ejecutamos la subrutina &scroll_listboxes
que le pasamos distintos parámetros; su funcionamiento lo vemos más abajo.
Using perl Syntax Highlighting
- $scroll->configure(-command => sub { foreach $list (@$listboxes) {
- $list->yview(@_);
- }});
- $scroll->pack(-side => 'left', -fill => 'y');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* Configuramos el scrollbar; con el valor que le da pack() al elemento scrollbar alineamos a la izquierda y le decimos que rellene todo el espacio que hay verticalmente.
Using perl Syntax Highlighting
- @$listboxes[0]->pack(-side => 'left');
- @$listboxes[0]->insert('0',"ID");
- @$listboxes[1]->pack(-side => 'left');
- @$listboxes[1]->insert('0',"PRECIO");
- @$listboxes[2]->pack(-side => 'left');
- @$listboxes[2]->insert('0',"NOMBRE");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* En estas líneas creamos los "títulos" de una forma trivial pero legible.
Alineamos a la izquierda todos los listbox (parten del elemento 0 los array en Perl) y con la función insert() le paso por parámetro el index del elemento "0", o sea, el primer elemento contendrá los títulos.
Using perl Syntax Highlighting
- $query="SELECT ID,Precio,Nombre from Productos ";
- my $sth = $connect->prepare($query);
- $sth->execute();
- while(my @fila=$sth->fetchrow_array())
- {
- @$listboxes[0]->pack(-side => 'left');
- @$listboxes[0]->insert('end',$fila[0]);
- @$listboxes[1]->pack(-side => 'left');
- @$listboxes[1]->insert('end',$fila[1]);
- @$listboxes[2]->pack(-side => 'left');
- @$listboxes[2]->insert('end',$fila[2]);
- }
- MainLoop;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* Aquí simplemente hacemos una query a la base de datos y la recorremos con fetchrow() (en PHP, mysql_fetch_array()) al elemento "end" que significa después del último elemento, o sea, al final de la listbox agregamos los DATOS. Y finalmente MainLoop; que le decimos que hasta aquí llega la GUI.
Using perl Syntax Highlighting
- sub scroll_listboxes {
- my ($sb, $scrolled, $lbs, @args) = @_;
- $sb->set(@args); # Llama a la barra de desplazamiento
- my ($top, $bottom) = $scrolled->yview( );
- foreach $list (@$lbs) {
- $list->yviewMoveto($top); # ajusta cada lb
- }
- }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* Esta subrutina hace el trabajo "difícil": recibe como parámetro las instancias
$scroll,$list,$listboxes respectivamente; con set() establece los valores "first" y "last" que es donde se ubicará la barra de desplazamiento, se le pasan argumentos denominados "anónimos", así se accede a los valores de forma rápida (no se preocupen en entenderlo todo todavía), después con yview() recibimos los valores que tiene actualmente la barra para "pegarlos" en todas las listbox existentes; para hacer eso las recorremos con un foreach() y con yviewMoveto() le pasamos el parámetro $top que es el valor $top de la barra de desplazamiento, en este caso no usamos $bottom. Y así dejamos a las listbox iguales basadas en la barra de desplazamiento.
Algunas opciones de configuraciones de lo escrito:
ScrollBar:
-activebackground => color
Establece el color de la barra.
-activerelief => 'flat' | 'groove' | 'raised' | 'ridge' | 'sunken'
Tipo de dibujo de los elementos activos.
-background => color
es obvio, ¿no? ^_^
-borderwidth => amount
-command => callback
Uso idéntico de botón y otros.
-cursor => cursorname
Establece nombre del cursor (Mouse).
-orient => "horizontal" | "vertical"
-relief => 'flat'|'groove'|'raised'|'ridge'|'sunken'|'solid'
Bordes.
-takefocus => 0 | 1 | undef
Si es que queremos que tome como foco el teclado la barra de desplazamiento.
-width => amount
ListBox:
-background => color
-borderwidth => amount
-cursor => cursorname
Igual que scrollbar.
-font => fontname
Tipo de letra (Arial, Comic, etc.)
-height => amount
Altura.
-relief => 'flat'|'groove'|'raised'|'ridge'|'sunken'|'solid'
Tipo de borde.
-selectbackground => color
Establece el color de fondo a ítemes seleccionados.
-selectborderwidth => amount
Establece el tamaño del borde a ítemes seleccionados.
-selectforeground => color
Establece el color del texto a ítemes seleccionados.
-selectmode => "single" | "browse" | "multiple" | "extended"
Elementos que se pueden seleccionar a la vez.
-takefocus => 0 | 1 | undef
Igual que scrollbar.
-width => amount
El ancho de caracteres si es menos o igual de 0, es tan ancho como caracteres tenga.
-xscrollcommand => callback
-yscrollcommand => callback
Código SQL para la base de datos test (crear la base de datos test; luego ejecutar este código):
Using sql Syntax Highlighting
CREATE TABLE `productos` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Precio` double(9,3) DEFAULT NULL,
`Nombre` varchar(50) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
--
-- Volcar la base de datos para la tabla `productos`
--
INSERT INTO `productos` VALUES (1, 12.500, 'Crema');
INSERT INTO `productos` VALUES (2, 9.600, 'Shampoo');
INSERT INTO `productos` VALUES (3, 150.000, 'Maquina Afeitar');
INSERT INTO `productos` VALUES (4, 110.900, 'Secador Pelo');
INSERT INTO `productos` VALUES (5, 9.900, 'Balsamo');
INSERT INTO `productos` VALUES (6, 35.700, 'Peine');
INSERT INTO `productos` VALUES (7, 51.000, 'Alisador');
INSERT INTO `productos` VALUES (8, 3.500, 'Jabon 250ml');
INSERT INTO `productos` VALUES (9, 4.700, 'Jabon 500ml');
INSERT INTO `productos` VALUES (10, 99.900, 'Depiladora');
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Precio` double(9,3) DEFAULT NULL,
`Nombre` varchar(50) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
--
-- Volcar la base de datos para la tabla `productos`
--
INSERT INTO `productos` VALUES (1, 12.500, 'Crema');
INSERT INTO `productos` VALUES (2, 9.600, 'Shampoo');
INSERT INTO `productos` VALUES (3, 150.000, 'Maquina Afeitar');
INSERT INTO `productos` VALUES (4, 110.900, 'Secador Pelo');
INSERT INTO `productos` VALUES (5, 9.900, 'Balsamo');
INSERT INTO `productos` VALUES (6, 35.700, 'Peine');
INSERT INTO `productos` VALUES (7, 51.000, 'Alisador');
INSERT INTO `productos` VALUES (8, 3.500, 'Jabon 250ml');
INSERT INTO `productos` VALUES (9, 4.700, 'Jabon 500ml');
INSERT INTO `productos` VALUES (10, 99.900, 'Depiladora');
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Así quedaría el programita:
A lo mejor no es el ejemplo más práctico para una empresa, pero así vamos superándonos, haré otro ejemplo flexgrid de vb6 o algo por el estilo, el típico para mostrar datos, así vamos profesionalizando estas prácticas.
OJO Cualquier duda, postean; no dudaré en responder y estoy al pendiente.
¡salu2!