strawberry sintaxis instalar for ejemplos comando active windows perl console

windows - sintaxis - ¿Cómo puedo mostrar la salida de la consola Perl en una GUI?



sintaxis de perl (5)

Desde una búsqueda rápida, tiene algunas opciones:

  1. Perl con NCurses (es una GUI, pero lo mantiene en la consola)
  2. Perl con wxWindows wxPerl
  3. PerlTK
  4. GTK con Perl (ver la referencia de wikibooks)

Además, hay una referencia de wikibooks para esto.

Tengo varios programas simples de Perl que escriben en el resultado estándar, pero esto tiene algunos problemas:

  • algunos de mis usuarios tienen miedo por una consola
  • mis usuarios trabajan en Windows, por lo que la salida de mi programa se muestra en una consola cmd , así que no puedo controlar la forma en que se muestra (colores y tamaño de terminal) y, lo que es peor, la consola no se puede redimensionar (al menos en ancho)

Para resolver estos problemas, me gustaría poder mostrar el resultado en una interfaz GUI simple como una opción. La GUI debe responder hasta que el programa finalice (debe ser posible desplazar o cambiar el tamaño de la ventana mientras se está ejecutando).

¿Qué kit de herramientas y artilugios simples puedo usar para hacer esto? (Desarrollo en Windows con ActivePerl).


wxWidgets usa el módulo Wx CPAN es popular en el mundo de Perl en este momento (ver Padre )

Sin embargo, no estoy seguro de que esto llegue con ActivePerl, que creo que puede venir con Tk .

/ I3az /


Puede usar cualquier opción de GUI que desee, y luego podría usar Tie :: STDOUT para redefinir el comportamiento de print y printf en el manejador de archivo STDOUT para, en su lugar, volcar el resultado en el widget de su elección. Lo único es que conseguir que hable limpiamente con sus widgets a través de los paquetes anónimos puede ser complicado. Aquí hay un ejemplo corto y crudo usando Win32 :: GUI :

use Win32::GUI(); use Tie::STDOUT print => sub { $main::textfield->Append(@_); }; my $main = Win32::GUI::Window->new( -name => ''Main'', -text => ''Perl'', -width => 220, -height => 230, ); our $textfield = $main->AddTextfield( -name => "Output", -left => 8, -top => 8, -width => 180, -height => 180, -readonly => 1, -multiline => 1, -vscroll => 1, ); $main->Show(); sub Main_Terminate { -1; } if(!fork()) { print "Hello./n"; for (1..20) { sleep 1; printf "More output %d/n", $_; } } else { Win32::GUI::Dialog(); }

Tenga en cuenta que la llamada a Win32::GUI::Dialog() al final está presente para evitar que la ventana se cierre tan pronto como finalice el script.


Si tiene Firefox instalado en las máquinas, he estado trabajando en el módulo XUL::Gui que le permite mostrar su gui de Perl usando el motor de renderizado de Firefox. Basándose en la respuesta de Adam:

use XUL::Gui; use Tie::STDOUT print => sub {$ID{text}->value .= join '''' => @_}; display Window title=>''Perl'', minwidth=>640, minheight=>480, TextBox( FILL SCROLL id=>''text'', multiline=>''true'' ), delay { print "hello world/n"; # Output goes to the window. for (1..5) { printf "More output %d/n", $_; } };

Editar: corrigió un error con valores de retorno de varias líneas de la interfaz gráfica de usuario, el ejemplo anterior es más agradable ahora. funciona con XUL :: Gui 0.35+


Win32 :: Console :: ANSI le permite controlar colores y ubicaciones de fondo y de texto, y el tamaño y el título de la ventana de línea de comandos.

AFAIK, no permite la entrada del mouse, pero puede ser suficiente si solo está mostrando el progreso del programa.

Otra posibilidad es volver a escribir el programa en html / javascript y tener capacidad interactiva completa.

A menudo hago mi trabajo pesado en perl, luego construyo y escribo un programa html para la interacción del usuario.

O tenga un programa html estándar y deje que el perl escriba un archivo json con los datos específicos antes de invocar el programa html.