Ich entwickle einen Desktop-Client mit Perl Tk Modul. Ich habe eine Schaltfläche, die das Verzeichnis für die jeweilige Aufgabe öffnet. Aber das Problem, mit dem ich konfrontiert bin, ist, dass es meine Perl-Schnittstelle schließt, die ich nicht möchte.Perl Tk Fenster autoclosing auf Browsing-Verzeichnis
Unten ist die Unter, die die Logik für ein Verzeichnis geöffnet implementiert:
sub open_directory {
my $directory = shift;
print "comes here atleast for $directory";
if ($^O eq 'MSWin32') {
exec "start $directory";
}
else {
die "cannot open folder on your system: $^O";
}
}
ich dieses Unter über nenne:
sub second_window{
my $row = 0;
$mw2 = new MainWindow;
#Loop for listing taskname,path and browse button for all tasks of a region
for my $i(1..$#tasks_region_wise){
$row = $row+1;
$frame_table-> Label(-text=>$sno+$i,-font=>"calibri")->grid(-row=>$row,-column=>0,-sticky=>'w');
$frame_table-> Label(-text=>$tasks_region_wise[$i][2],-font=>"calibri")->grid(-row=>$row,-column=>1,-sticky=>'w');
$frame_table-> Label(-text=>$tasks_region_wise[$i][3],-font=>"calibri")->grid(-row=>$row,-column=>2,-sticky=>'w');
#Calling that sub in the below line:
$frame_table->Button(-text => 'Browse',-relief =>'raised',-font=>"calibri",-command => [\&open_directory, $tasks_region_wise[$i][3]],-activebackground=>'green',)->grid(-row=>$row,-column=>3);
$frame_table->Button(-text => 'Execute',-relief =>'raised',-font=>"calibri",-command => [\&open_directory, $tasks_region_wise[$i][4]],-activebackground=>'green',)->grid(-row=>$row,-column=>4);
$frame_table->Button(-text => 'Detail',-relief =>'raised',-font=>"calibri",-command => [\&popupBox, $tasks_region_wise[$i][2],$tasks_region_wise[$i][5]],-activebackground=>'green',)->grid(-row=>$row,-column=>5);
}
$frame_table->Label()->grid(-row=>++$row);
$frame_table->Button(-text => 'Back',-relief =>'raised',-font=>"calibri",-command => \&back,-activebackground=>'green',)->grid(-row=>++$row,-columnspan=>4);
MainLoop;
}
Es öffnet sich das Datei-Explorer-Fenster richtig, aber schließt die Perl-Schnittstelle.
ich glaube, das Problem ist die 'exec' Aufruf, die Ihre laufenden ausführbar durch einen neuen ersetzen. – ulix
Danke für diesen Punkt @ulix, ich habe die Problemumgehung dafür durch Verwendung der Systemfunktion anstelle des Exec-Aufrufs. – Mohit