Hallo zusammen,
nach reichlichem Lesen dieses Forums habe ich einige gute Ansätze für ein kleines Perl/TK-Programm gefunden, das die folgende simple Funktion haben soll:
1. LOKALISIERE ein PERL Programm über einen FILE OPEN Dialog.
2. Zeige den PFAD zum PERL-Programm sowie den Namen des PERL Programmes in einem ENTRY FIELD an.
3. Bei drücken der "AUSFÜHREN"-Taste soll das PERL-Programm ausgeführt werden. Der normalerweise im DOS-Fenster angezeigte OUTPUT soll umgeleitet und in einem
AUSGABE-FENSTER angezeigt werden.
Mein Problem ist es nun, dass ich es nicht schaffe, das über den FILE OPEN Dialog gefundene PERL-Programm auszuführen und den normalerweise im DOS-Fenster angezeigten Ablauf bzw. den TEXT des PERL-Programmes in ein TEXT WIDGET im PERL/TK-Programm auszugeben.
Wer kann mir zeigen:
1. wie das über den FILE-OPEN Dialog gefundene PERL-Programm ausgeführt werden kann (siehe SUB Programm_Ausfuehren).
2. wie die "Umleitung" der DOS-Box Ausgabe in ein TEXT widget funtioniert.
Hier das Perl/TK-Programm:
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/perl
# ******************************************************************************
# ** Funktion: **
# ** 1. LOKALISIERE ein PERL Programm über einen FILE OPEN Dialog. **
# ** 2. Zeige den PFAD zum PERL-Programm sowie den Namen des PERL Programmes **
# ** in einem ENTRY FIELD an. **
# ** 3. Bei drücken der "AUSFÜHREN"-Taste soll das PERL-Programm ausgeführt **
# ** werden. Der normalerweise im DOS-Fenster angezeigte OUTPUT soll **
# ** umgeleitet und in einem AUSGABE-FENSTER angezeigt werden. **
# ******************************************************************************
use Tk; # Use TK.
use Tk::LabFrame; # Use "Label Frame".
# *****************************************************************************
# ** Generiere das HAUPTFENSTER ***********************************************
# *****************************************************************************
my $mw = MainWindow->new; # Das "Hauptfenster".
$mw->title("Programm laden und Ausführen"); # Der TITEL von "Hauptfenster".
# *****************************************************************************
# ** Generiere DATEI Menü *****************************************************
# *****************************************************************************
$ErstesMenuBar = $mw->Frame(-relief=>'groove', -borderwidth=>3)->pack(-side=>'top',-fill=>'x'); # Das Rahmenwerk.
$MeinErstesMenuBar = $ErstesMenuBar->Menubutton(-text=>'Datei')->pack(-side =>'left'); # Der Button "Datei".
$MeinErstesMenuBar->command(-label=>'Ende', -command=>sub{$mw->destroy}); # Der Button "Ende".
# *****************************************************************************
# ** Generiere DATEI LADEN Menü (Laden des Programmes) ************************
# ** - Zuerst zeichne ich ein FRAME um die ganze Einheit **********************
# ** - Danach kommt der LADEN BUTTON ******************************************
# ** - Abschließend kommt das ENTRY Feld **************************************
# *****************************************************************************
my $laden = $mw->LabFrame(-label=>'[ 1--> Lade Programm zur Ausführung ]', -labelside=>'acrosstop')->pack
(-side =>'top', -expand=>1, -fill=>'x'); #
my $laden_button = $laden->Button(-text=>'Programm laden', -command=> \&Lade_Programm)->pack # Pack
(-side=>'left', -expand=>0, -fill=>'none'); #
my $laden_entry = $laden->Entry(-width=>50)->pack # Pack
(-side=>'left', -expand=>1, -fill=>'x'); #
# *****************************************************************************
# ** Generiere DATEI AUSFÜHREN Menü (ausführen der Aktion) ********************
# ** - Zuerst zeichne ich ein FRAME um die ganze Einheit **********************
# ** - Danach kommt der AUSFÜHREN BUTTON **************************************
# ** - Abschließend kommt der ENDE BUTTON *************************************
# *****************************************************************************
my $button = $mw->LabFrame(-label=>'[ 2--> Führe Programm aus ]', -labelside => 'acrosstop') # Definition des RAHMENS.
->pack (-side=>'top', -expand=>1, -fill=>'x'); # Pack ...
my $doit_btn = $button->Button(-text=>'Ausführen', -command=> \&Programm_Ausfuehren) # Rufe Unterprogramm.
->pack(-side=>'left', -expand=>0); # EXPAND 0: button so groß wie Text.
my $exit_btn = $button->Button(-text=>'Ende', -command =>sub { $mw->destroy() })# Der Button "SCHLIEßEN".
->pack(-side=>'left', -expand=>0); # Pack ...
# *****************************************************************************
# ** Generiere AUSGABE-FENSTER für Ausgabe des Protokolles ********************
# *****************************************************************************
my $protokoll = $mw->Scrolled("Text", # Ein TEXT widget.
-scrollbars => 'osoe', # Optional SOUTH, Optional EAST.
-background => '#ffffff', # Hintergrundfarbe des Fensters.
-foreground => 'black', # Textfarbe
-width => 90, # Fensterbreite
-height => 20, # Fensterhöhe
-relief => 'sunken', # SUNKEN
-font => '{verdana} 10 {normal}',# FONT und FONT SIZE
-wrap => 'none') #
->pack(-side=>'top', -expand=>1, -fill=>'both'); # PACK ...
# *****************************************************************************
# ** Das abschließende TEXT LABEL *********************************************
# *****************************************************************************
my $MyLabel = $mw->Label(-text=>"© XYZ", -relief=>'groove')->pack();
MainLoop;
# *****************************************************************************
# ** Sub LADE PROGRAMM *******************************************************
# *****************************************************************************
sub Lade_Programm { # Start der Unterroutine "Lade Programm".
my $file_typ = [ # Definition der zu öffnenden Dateitypen.
['PERL Programm', '.pl' ], # Erster Eintrag = ".pl".
['Alle Dateien', '*' ], # Zweiter Eintrag = "*".
]; # Ende der Definition.
my $dn = $mw->getOpenFile(-filetypes=>$file_typ);# ???
if (defined $dn and $dn ne '') { # ???
$laden_entry->delete(0, 'end'); # ???
$laden_entry->insert('end', $dn); # ???
} # Ende der Schleife.
} # Ende der Unterroutine "Lade Programm".
# *****************************************************************************
# ** Sub Programm_Ausfuehren **************************************************
# *****************************************************************************
sub Programm_Ausfuehren {
# system($^X, "C:/TEST/a.pl"); # Führe dieses PERL-Programm aus.
}
Das auszugebende PERL-Programm ist sehr simpel:
#!/usr/bin/perl
print "Diesen Text am Bildschirm ausgeben\n";
Bearbeitet von Crian: CODE-Tags ergänzt.\n\n
<!--EDIT|Crian|1093257618-->