Página 1 de 1

Interfaz para un programa de Perl

NotaPublicado: 2016-09-14 10:30 @479
por Stiven42
Buenos días. Espero no haber creado un tema que ya hayan solucionado con anterioridad.

Llevo ya un par de años trabajando con Perl y creado diferentes aplicativos que siempre corro en símbolos del sistema o a través de un ejecutable que hago por medio del módulo PAR::Packer.

Lo que ahora quiero es crear interfaz para todos mis programas, pero nunca lo he hecho antes. He buscado por Internet y me dan muchas opciones: pasar el código a Java, crear paquetes con aplicativos HTML, etc., pero la verdad no sé por dónde empezar.

¿Me podrían dar consejo o una guía de por dónde empezar? Muchas veces me ha ocurrido que aprendo la forma difícil de hacer las cosas y meses después descubro una forma mucho más sencilla de hacerlo.

Muchas gracias.

Re: Interfaz para un programa de Perl

NotaPublicado: 2016-09-14 16:16 @719
por explorer
Una forma de verlo es mirando aplicaciones que ya tienen un interfaz gráfico, como por ejemplo

Padre, usando la librería wxWidgets
Imagen

LedgerSMB, un sistema de contabilidad y ERP que usa un navegador web.
Imagen

PACManager, usando GTK+ (este lo uso todos los días)
Imagen

Hay otros entornos gráficos que son muy interesantes, como por ejemplo, Prima (en MetaCPAN)
Imagen

El venerable Tk/Perl
Imagen

Gtk2,3/Perl

Otra opción es usar Firefox como herramienta gráfica, y programarla con el sistema XUL. La ventaja que tienes es que no tienes que instalar nada (solo es necesario que el usuario tenga instalado un navegador compatible). Perl tiene mucho soporte para esto.

Re: Interfaz para un programa de Perl

NotaPublicado: 2016-09-16 11:53 @536
por Stiven42
¡¡¡Muchas gracias!!!
Voy a revisar las opciones y les comento cómo me va :D

Re: Interfaz para un programa de Perl

NotaPublicado: 2016-11-30 14:47 @658
por MARKO
explorer escribiste:El venerable Tk/Perl


Yo utilizo Tk/Perl para mis desarrollos. Te dejo un script que te permite seleccionar archivos .xls/.xlsx de un directorio y hacer algo con la ruta completa de los archivos seleccionados.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use warnings;
  3. use Tk;
  4. use Tk::HList;
  5. use utf8;
  6.  
  7. system ("cls");
  8.  
  9. my ($directorio, @archivos);
  10.  
  11. #############Elementos que conforman las ventanas#########################################################################
  12.  
  13. my $FormaPrincipal = MainWindow->new(-title=>"Interfaz Gráfica");
  14. my $FrameIzquierda = $FormaPrincipal->Frame(-borderwidth => 3, -relief => 'raised');
  15. my $FrameCentro = $FormaPrincipal ->Frame(-borderwidth => 3, -relief => 'raised');
  16. my $FrameDerecha = $FormaPrincipal ->Frame(-borderwidth => 3, -relief => 'raised');
  17.  
  18. $FrameIzquierda ->pack(-side => 'left', -expand => 1, -fill => 'both');
  19. $FrameCentro ->pack(-side =>'left', -expand => 1, -fill => 'both');
  20. $FrameDerecha ->pack(-side => 'left',  -expand => 1, -fill => 'both');
  21.  
  22. $FrameIzquierda -> Button(
  23.         -text => "SELECIONA\nDIRECTORIO",
  24.         -command => sub{
  25.                                                 $directorio =$FormaPrincipal->chooseDirectory(
  26.                                                         -initialdir => 'P:\Gerencia de Mercado\Restringido\MONITOREO DEL MM',
  27.                                                         -title => 'Elija Driectorio'
  28.                                                 );
  29.  
  30.                                                 if (defined($directorio)){
  31.                                                         opendir(DIR, $directorio);
  32.                                                         undef(@archivos);
  33.                                                         foreach(readdir(DIR)){
  34.                                                                 if ($_=~ m/\.xls+$/ or $_ =~ m/\.xlsx+$/){
  35.                                                                         push (@archivos,$_);
  36.                                                                 }
  37.                                                         }
  38.                                                         close(DIR);
  39.                                                 }
  40.                                         },
  41.         -width => 10,
  42.         -height => 5,
  43.         -foreground => "red",
  44.         -background => "blue",
  45. )->pack(-expand=> 1, -fill=> "both", -side => "top" );
  46.  
  47. my $Listbox = $FrameIzquierda->Scrolled("Listbox",
  48.     -background => "white",
  49.     -scrollbars => "se",
  50.     -height => "20",
  51.     -selectmode => "extended",
  52.     -listvariable => \@archivos
  53. )->pack(-side => "top", -expand=> 1, -fill=> "both");
  54.  
  55. $FrameIzquierda -> Button(
  56.         -text => "Analiza\nArchivos",
  57.         -command => \&Analisis,
  58.         -height => 5
  59. )->pack(-side => "left" );
  60.  
  61. my $FrameBotones = $FrameDerecha -> Frame(
  62.         -borderwidth => 3,
  63.         -relief => 'sunken'
  64. )->pack(-side => 'top', -fill=> 'both');
  65.  
  66.  
  67. $FrameBotones -> Button(
  68.         -text => "Salir",
  69.         -command => sub{exit()},
  70.         -height => 5,
  71.         -width => 40
  72. )->grid(-column => 0, -row=> 7, -sticky=>'nsew',-columnspan=>'3');     
  73.  
  74. MainLoop;
  75.  
  76. #################################################################################################################
  77.  
  78. sub Analisis{
  79.        
  80.         my @indices = $Listbox-> curselection;
  81.         if (scalar(@indices)!=0){
  82.                
  83.                 foreach my $indice(@indices){
  84.                         my $archivo = $archivos[$indice];
  85.                         my $rutacompleta = $directorio.'/'.$archivo;
  86.                         print "$rutacompleta\n";
  87.                 }
  88.  
  89.         }
  90.         else{
  91.  
  92.                 $FormaPrincipal->messageBox(-title => 'Error',
  93.         -message => 'Seleccione Archivo',
  94.         -type => 'Ok');
  95.                
  96.         }              
  97.  
  98. }
  99.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Éxitos.