Mit eurer Hilfe bin ich der endgültigen Lösung (wenn es sowas überhaupt gibt) sehr nahe. Die LISTBOX wird jetzt sauber gefüllt, und zwar nur mit den DATEI-NAMEN (also ohne den PFAD). Nur der letztendliche Schritt, nämlich das ausgewählte programm auszuführen, schlägt fehl.
Die Fehlermeldung:
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.
Offensichtlich ist dieser aufgerufene String fehlerhaft (in SUB RUN_PERL_PROG, vorletzte Zeile)
...
...
my $tmp_2 = system(qx($^X $tmp_1));
...
...
Hier nochmals der komplette Code zum testen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/perl
use strict;
use Tk;
use Tk::LabFrame;
use File::Basename;
# *****************************************************************************
# ** Generiere HAUPTMENÜ ******************************************************
# *****************************************************************************
my $mw = MainWindow->new;
$mw->title("Ein TEST mit LISTBOX");
# *****************************************************************************
# ** Generiere Menü AUSWAHL DES DIRECTORIES ***********************************
# *****************************************************************************
my $laden = $mw->LabFrame(-label=>'[ 1--> Auswahl des Directories ]', -labelside=>'acrosstop')
->pack (-side =>'top', -expand=>1, -fill=>'x');
my $laden_button = $laden->Button(-text=>'Auswählen', -command=> \&Load_Path)
->pack (-side=>'left', -expand=>0, -fill=>'none');
my $laden_entry = $laden->Entry(-width=>100)
->pack (-side=>'left', -expand=>1, -fill=>'x');
# *****************************************************************************
# ** Generiere LISTBOX ********************************************************
# *****************************************************************************
my $listbox_frame = $mw->LabFrame(-label=>'[ 2--> Programme-Auswählen ]', -labelside=>'acrosstop')
->pack (-side =>'top', -expand=>1, -fill=>'x');
my $Auswahl_Liste = $listbox_frame->Listbox("width" => 70,
"height" => 5,
-selectmode => 'single')
->pack(-side=> 'left');
my $doit_btn = $listbox_frame->Button(-text=>'Ausgewählte Programme ausführen', -command=> \&Run_Perl_Prog)
->pack(-side=>'left', -expand=>0);
MainLoop();
# *****************************************************************************
# ** Sub LOAD PATH ************************************************************
# *****************************************************************************
sub Load_Path {
my $file_typ = [
['PERL Program', '.pl' ],
['All Files', '*' ],
];
my $dn = $mw->getOpenFile(-filetypes=>$file_typ);
my $file = $dn;
my $dn = dirname($file);
if (defined $dn and $dn ne '') {
$laden_entry->delete(0, 'end');
$laden_entry->insert('end', $dn);
my @files = glob($dn.'/*.pl');
$_ = basename($_) for(@files); # <---Nur FILE NAME übrig lassen.
$Auswahl_Liste->delete(0, 'end')
if(@files);
$Auswahl_Liste->insert('end', @files)
}
}
# *****************************************************************************
# ** Sub Run_Perl_Prog ********************************************************
# *****************************************************************************
sub Run_Perl_Prog {
my $Get_Path = $Auswahl_Liste->get($Auswahl_Liste->curselection());
my $Get_File_Name = $laden_entry->get();
my $slash = "/";
print "Ausgewaehlter Pfad: $Get_File_Name\n";
print "Der Slash : $slash\n";
print "Ausgewaehlte Datei: $Get_Path\n";
if(!$Get_Path || $Get_Path eq ''){
$mw->messageBox(-message=>" Zuerst ein Programm auswählen.",
-type=>"OK"),
return 1;
}
my $tmp_1 = "$Get_File_Name$slash$Get_Path";
my $tmp_2 = system(qx($^X $tmp_1));
}