Thread Laden/Ausführen/Anzeigen Programm via GUI: Wie implementiere ich das in PERL/TK? (8 answers)
Opened by Gerry at 2004-08-22 14:40

Gerry
 2004-08-22 14:40
#42527 #42527
User since
2004-08-18
26 Artikel
BenutzerIn
[default_avatar]
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:

Code: (dl )
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:
Code: (dl )
1
2
#!/usr/bin/perl
print "Diesen Text am Bildschirm ausgeben\n";


Bearbeitet von Crian: CODE-Tags ergänzt.\n\n

<!--EDIT|Crian|1093257618-->

View full thread Laden/Ausführen/Anzeigen Programm via GUI: Wie implementiere ich das in PERL/TK?