• Publicidad

Curses::UI

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Curses::UI

Notapor natxo » 2010-03-14 14:28 @644

Hola:

Quiero crear una interfaz gráfica con curses y he visto que existe el módulo Curses::UI.

Esto funciona (crea un 'navegador´ para elegir un archivo):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Curses::UI;
my $cui = Curses::UI->new();
my $file = $cui->loadfilebrowser();

if (defined $file) {
    $cui->dialog("you selected $file");
}
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

y esto me saca un calendario:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $date = $cui->calendardialog();

if ( defined $date ) {
    $cui->dialog("you selected $date");
}
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Me interesaría también sacar una caja en la que se pudiera introducir texto. Según la documentación, lo que necesito es Curses::UI::TextEditor.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $cui = new Curses::UI;
my $win = $cui->add('window_id', 'Window');

my $editor = $win->add(
    'myeditor', 'TextEditor',
    -vscrollbar => 1,
    -wrapping   => 1,
);

$editor->focus();
my $text = $editor->get();
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Este código no funciona, no da errores, simplemente no sucede nada al ejecutarlo y me devuelve a mi prompt.

No sé dónde está el error. ¿Alguna idea?
saludos,
Natxo Asenjo
natxo
Perlero nuevo
Perlero nuevo
 
Mensajes: 76
Registrado: 2007-08-09 16:22 @723
Ubicación: Países Bajos

Publicidad

Re: Curses::UI

Notapor explorer » 2010-03-14 15:51 @702

El problema está en que el objeto que permite editar textos debe estar añadido a una ventana, y para que la ventana comience a responder a la entrada de texto por parte del usuario, el programa debe entrar en el bucle principal de Curses.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Curses::UI;
  3.  
  4. my $cui = Curses::UI->new();
  5.  
  6. my $texto_a_editar = "Un ejemplo de texto a editar";
  7.  
  8. ## Menú
  9. # Definición
  10. my @menu = (
  11.     {
  12.         -label => 'File',
  13.         -submenu => [
  14.             { -label => 'Exit      ^Q', -value => \&exit_dialog  }
  15.         ]
  16.     },
  17. );
  18.  
  19. # Objeto menú, lo añadimos al UI
  20. my $menu = $cui->add(
  21.     'menu','Menubar',
  22.     -menu => \@menu,
  23.     -fg  => "blue",
  24. );
  25.  
  26. ## Ventana
  27. my $win1 = $cui->add(
  28.     'win1', 'Window',
  29.     -border => 1,
  30.     -y    => 1,
  31.     -bfg  => 'red',
  32. );
  33.  
  34. # Objeto texto editable, lo añadimos a la ventana
  35. my $texteditor = $win1->add("text", "TextEditor",
  36.     -text => $texto_a_editar,
  37. );
  38.  
  39. ## Definición de teclas
  40. $cui->set_binding(sub {$menu->focus()}, "\cX"); # activa el menú
  41. $cui->set_binding( \&exit_dialog , "\cQ");      # termina
  42.  
  43.  
  44. $texteditor->focus();                           # foco en el texto
  45.  
  46. $cui->mainloop();                               # ¡Adelante!
  47.  
  48. sub exit_dialog {                               # en caso de salir...
  49.     my $return = $cui->dialog(
  50.         -message   => "¿Realmente quiere salir?",
  51.         -title     => "¿Está seguro?",
  52.         -buttons   => ['yes', 'no'],
  53.     );
  54.  
  55.     $cui->dialog( $texteditor->get() );         # presentamos el texto editado
  56.  
  57.     exit(0) if $return;
  58. }
  59.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

mainloop() es la que que encarga de repartir los eventos. En este ejemplo, captura dos combinaciones de teclado (control-X y control-Q) para activar dos subrutinas. Y todo lo demás se lo pasa al objeto TextEditor.

Cuando pulsas control-Q, se ejecuta la subrutina exit_dialog(), que primero muestra una confirmación al usuario, y luego muestra, en otra caja de diálogo, el texto hasta ahora introducido.

(Ejemplo sacado de Curses::UI::Tutorial)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Curses::UI

Notapor natxo » 2010-03-16 16:33 @731

Ok, gracias por tu respuesta y tus comentarios. Este Curses::UI es un módulo muy bonito. A ver si tengo tiempo de estudiarlo con más tranquilidad (ahora estoy a tope de curro y no tengo la tranquilidad necesaria para ponerme a trastear con él, por desgracia).
saludos,
Natxo Asenjo
natxo
Perlero nuevo
Perlero nuevo
 
Mensajes: 76
Registrado: 2007-08-09 16:22 @723
Ubicación: Países Bajos


Volver a Básico

¿Quién está conectado?

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