Kalisto has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks I am trying to run this code below The issue is the FileSelect sub at the bottom. When trying to click on a .nzb file dialog box is not updated. Clicking Open does nothing. Only if I manually type something in the dialog box does it return the file name.
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::FileSelect; my $file_open_dir = "/home/calipso/Desktop"; my $open_file_types = [ ['NZB Files', '.nzb'] ], my $canvas_width = 1000; my $canvas_height = 1000; my $mw = MainWindow->new; $mw->geometry('800x600'); $mw->title("**************"); $mw->configure( -menu => my $menubar = $mw->Menu ); my $file = $menubar->cascade( -label => '~File' ); my $tools = $menubar->cascade( -label => '~Tools' ); my $help = $menubar->cascade( -label => '~Help' ); $file->command( -label => "Import", -accelerator => 'Ctrl-i', -underline => 0, -command => sub { File_Import() }, ); $file->command( -label => "Quit", -accelerator => 'Ctrl-Q', -underline => 0, -command => sub { Exit() }, ); $tools->command( -label => "Options", -underline => 0, -command => sub { Tools_Options() }, ); $help->command( -label => "About", -underline => 0, -command => sub { About() }, ); my $nzb_list_canvas = $mw->Canvas( -width => 200, -height => $canvas_height, -background => 'black', )->pack( -side => 'left', -expand => 1, -padx => 10, -pady => 10 ); my $nzb_segment_canvas = $mw->Canvas( -width => 600, -height => $canvas_height, -background => 'black', )->pack( -side => 'left', -expand => 1, -padx => 10, -pady => 10 ); sub File_Import { my $mw = MainWindow->new; my $nzb_file = $mw->getOpenFile( -title =>"Select NZB File", -initialdir => $file_open_dir, -filetypes => $open_file_types, -defaultextension => '.nzb' ); print qq{You chose to open "$nzb_file"\n} if $nzb_file; } sub Exit { exit(0); } MainLoop;

Replies are listed 'Best First'.
Re: Tk::FBox getOpenFile Dialog Box stays empty
by Anonymous Monk on Oct 25, 2009 at 00:34 UTC
    I do not get a dialogbox, I only get the second MainWindow you create. In my console I see
    Tk::Error: bad file type "ARRAY(0x22619c)", should be "typeName {exten +sion ?extensions ...?} ?{macType ?macTypes ...?}?" at site/lib/Tk.pm + line 337.
    filetypes wants two or more, and $open_file_types has only one
    my $open_file_types = [ ['NZB Files', '.nzb'] , []];
    Instead of sub { File_Import() }, you want \&File_Import, or  [ \&File_Import, $mw], or
    $file->command( -label => "Import", -accelerator => 'Ctrl-i', -underline => 0, -command => [ sub { my ( $mw, $file_open_dir ) = @_; my $nzb_file = $mw->getOpenFile( -title => "Select NZB File", -initialdir => $file_open_dir, -filetypes => [ [ 'NZB Files', '.nzb' ], [] ], -defaultextension => '.nzb' ); print qq{You chose to open "$nzb_file"\n} if $nzb_file; }, $mw, $file_open_dir ], );
Re: Tk::FBox getOpenFile Dialog Box stays empty
by zentara (Cardinal) on Oct 25, 2009 at 13:55 UTC
    man, I have no clue what you think your script is supposed to do. When I run it, it gives me a mainwindow with 2 black boxes in it, and nzb file gets populated into the entry box with a mouse click

    ..... upon looking at your code, I see you create 2 mainwindows, ..... this is definitely bad.....and can lead to undefined behavior, iirc..... you even leave an empty mainwindow artifact on the screen..... use a toplevel instead of a mainwindow for secondary windows....tk only likes 1 mainwindow

    .... are you trying to put the return value from the get_file sub onto your canvas?....it looks like you just copy'n'pasted some code together and are asking why dosn't it work?..... i don't do homework anymore...i help you correct it.. :-)


    I'm not really a human, but I play one on earth.
    Old Perl Programmer Haiku