• Publicidad

Tk::getOpenFile;

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Tk::getOpenFile;

Notapor kondenado » 2006-12-26 17:52 @786

Hola

Aquí va mi problema.
Lo explicaré con el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Tk;

my $mw = MainWindow->new;
my $menubar = $mw->Menu;
my $openfile = $menubar->cascade(-label => '~Open');
$openfile->command(
        -label => 'Open',
        -command => sub{$mw->getOpenFile});
$mw->configure(-menu => $menubar);

MainLoop;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Hssta aquí todo bien, pero no sé cómo guardar la opción que el usuario ha seleccionado en el getOpenFile... por lo que he visto, hice algo así pero aun no funciona:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Tk;

my $mw = MainWindow->new;
my $menubar = $mw->Menu;
my $openfile = $menubar->cascade(-label => '~Open');
$openfile->command(
        -label => 'Open',
        -command => sub{\&get_file});
$mw->configure(-menu => $menubar);

sub get_file{
        my $file = $mw->getOpenFile;
        my $file_dialog = $mw->Dialog(
                -title => 'openned file',
                -text => $file,
                -buttons => ['Ok']);
}

MainLoop;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


desde ya, gracias =)
Avatar de Usuario
kondenado
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2006-08-21 18:57 @831

Publicidad

Notapor explorer » 2006-12-26 21:54 @954

Faltan un par de cosillas y cambiar otras:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    1 #!/usr/bin/perl
    2
    3 use Tk;
    4 use Tk::Dialog;
    5
    6 my $mw = MainWindow->new;
    7 my $menubar = $mw->Menu;
    8 my $openfile = $menubar->cascade(-label => '~Open');
    9
   10 $openfile->command(
   11     -label => 'Open',
   12     -command => \&get_file,
   13 );
   14 $mw->configure(-menu => $menubar);
   15
   16 sub get_file{
   17     my $types = [
   18         ['Text Files',       ['.txt', '.text']],
   19         ['TCL Scripts',      '.tcl'           ],
   20         ['C Source Files',   '.c',      'TEXT'],
   21         ['GIF Files',        '.gif',          ],
   22         ['GIF Files',        '',        'GIFF'],
   23         ['All Files',        '*',             ],
   24     ];
   25
   26     my $file = $mw->getOpenFile(-filetypes=>$types);
   27     my $file_dialog = $mw->Dialog(
   28         -title => 'openned file',
   29         -text  => $file,
   30         -buttons => ['Ok']
   31     );
   32     $file_dialog->Show('-global');
   33 }
   34
   35 MainLoop;
   36 __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
* He agregado la línea 4 para poder usar diálogos
* En la línea 12, estaba mal escrita la forma de pasar a -command la referencia de una función. Fíjate que es simplemente el nombre de la función &get_file precedida por el '\' para indicar que le estamos pasando la referencia a esa función. Lo que tenías antes era: sub{\&get_file}, que es una función que devuelve la referencia a &get_file, pero eso no le sirve a -command
* De la 17 a 24 he añadido algún contenido para la lista desplegable de tipos de archivo. Lo he sacado del ejemplo de getOpenFile en CPAN
* En la 26, agregamos a la llamada getOpenFile los tipos de ficheros definidos antes
* Y, lo que faltaba, en la línea 32, mostramos la caja de diálogo con la selección hecha por el usuario.

El resultado de getOpenFile queda almacenado en $file, pero como es una variable local a get_file, su valor se perderá al terminar esa función.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kondenado » 2006-12-27 13:54 @621

muchas gracias
funciona a la perfección.

:/ lo de Tk::Dialog se me paso por alto en el ejemplo =O pero lo había puesto en mi script, en fin, eso ya no importa.

gracias otra vez
Avatar de Usuario
kondenado
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2006-08-21 18:57 @831

Notapor kondenado » 2006-12-30 18:55 @830

bueno, siguiendo kon el mismo tema tengo mas problemas :oops:

kon el mismo kodigo he intentado asignar el valor ke toma $file (my $file = $mw->getOpenFile(-filetypes=>$types); ) en una variable ke es usada fuera de la subrutina, pero no lo he logrado. =/

Mas especifikamente, el valor de $file se asigna a una variable externa llamada $currentfile, la kual se usa en un kuadro de Dialogo para ser mostrada dentro del atributo "-text". Aki el kode:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Tk;
use Tk::Dialog;

my $mw = MainWindow->new;
my $menubar = $mw->Menu;
my $openfile = $menubar->cascade(-label => '~Open');
my $view = $menubar->cascade(-label => '~View');
my $currentfile;

$openfile->command(
    -label => 'Open',
    -command => \&get_file,
);
my $current_dialog = $mw->Dialog(
        -title => 'Current File',
        -text => $currentfile,
        -font => 'Fixedsys',
        -buttons => ['Ok'],
        );
$view->command(
        -label => 'File',
        -command => sub{$current_dialog->Show;}
        );
$mw->configure(-menu => $menubar);
sub get_file{
    my $types = [
        ['Text Files',       ['.txt', '.text']],
        ['TCL Scripts',      '.tcl'           ],
        ['C Source Files',   '.c',      'TEXT'],
        ['GIF Files',        '.gif',          ],
        ['GIF Files',        '',        'GIFF'],
        ['All Files',        '*',             ],
    ];
        my $file = $mw->getOpenFile(-filetypes => $types);
        $currentfile = $file;
}

MainLoop;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


desde ia gracia
Avatar de Usuario
kondenado
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2006-08-21 18:57 @831

Notapor explorer » 2006-12-31 07:15 @344

Si analizamos el código, esta es la secuencia de acontecimientos:
1.- Creas la ventana principal y la barra de menús
2.- $currentfile es creada. Su valor es indefinido.
3.- Defines qué sucede cuando el usuario pulsa sobre 'Open'
4.- Creas la caja de diálogo. ATENCIÓN: $currentfile, aquí, sigue estando indefinida.
5.- Defines qué sucede cuando el usuario pulsa sobre 'View'
6.- Defines la función que saca el openGetFile
7.- Entras en el bucle principal de espera

Date cuenta: creas el diálogo UNA vez, con el valor de $currentfile EN ESE MOMENTO, por lo que no veremos nada, porque nada tiene.

Cuando el usuario pulsa sobre 'Open', $currentfile, correctamente, se actualiza al valor de $file, PERO, cuando el usuario pulsa sobre 'View', estamos viendo el valor ORIGINAL de CUANDO SE CREÓ el diálogo. Osea, nada.

Entonces, la solución pasa, naturalmente, por crear el diálogo JUSTO DESPUÉS de saber el nuevo valor de $currentfile... o, mejor aún... JUSTO cuando el usuario lo pide:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Tk;
use Tk::Dialog;

# Componentes
my $mw       = MainWindow->new;
my $menubar  = $mw->Menu;
my $openfile = $menubar->cascade(-label => '~Open');
my $view     = $menubar->cascade(-label => '~View');

# Variables globales
my $currentfile;

# Composición
$mw->configure(
    -menu        => $menubar,
);
$openfile->command(
    -label       => 'Open',
    -command     => \&get_file,
);
$view->command(
    -label       => 'File',
    -command     => \&dialogo_file,
);

# Subrutinas
sub get_file{
    my $types = [
        ['Text Files',       ['.txt', '.text']],
        ['TCL Scripts',      '.tcl'           ],
        ['C Source Files',   '.c',      'TEXT'],
        ['GIF Files',        '.gif',          ],
        ['GIF Files',        '',        'GIFF'],
        ['All Files',        '*',             ],
    ];
    $currentfile =$mw->getOpenFile(-filetypes => $types);
}

sub dialogo_file {
    my $current_dialog = $mw->Dialog(
        -title   => 'Current File',
        -text    => $currentfile,
        -font    => 'Fixedsys',
        -buttons => ['Ok'],
    );
    $current_dialog->Show;
}

# Bucle principal
MainLoop;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados