 |
|
 |
 |
|
Perl mit dem Tk-Modul Teil 14
|
Steuerelemente - Text 
Was fehlt uns jetzt noch für einen Texteditor? Richtig ein Widget mit dem
Sie Text verarbeiten können. Und dafür gibt das gleichnamige Widget ...
#!/usr/bin/perl -w
use strict;
use Tk;
my ($mw, $frame);
my ($text, $yscr, $xscr);
my ($fbut, $bxit);
#Zuerst wieder ein Hauptfenster und ein Frame
$mw = MainWindow->new();
$frame = $mw->Frame();
#Jetzt erstellen wir unser Text-Widget
#mit 2 Scrollbars in unserem Frame
$text = $frame->Text(-wrap => 'none');
$yscr = $frame->Scrollbar(-command =>
[yview => $text],
-orient => 'vertical');
$xscr = $frame->Scrollbar(-command =>
[xview => $text],
-orient => 'horizontal');
# Jetzt verbinden wir die beiden Scrollbars mit dem Text-Widget
$text->configure(-yscrollcommand => [ set => $yscr ]);
$text->configure(-xscrollcommand => [ set => $xscr ]);
#Jetzt packen wir wieder alles zusammen
$frame->pack(-expand => 'yes', -fill => 'both');
$yscr->pack(-side => 'right', -fill => 'y');
$xscr->pack(-side => 'bottom', -fill => 'x');
$text->pack(-expand => 'yes', -fill => 'both',
-side => 'left');
#Der Exit Button
$fbut = $mw->Frame()->pack();
$bxit = $fbut->Button(-text => 'Exit',
-command => [$mw => 'destroy']);
$bxit->pack(-side => 'left');
MainLoop;
So siehts aus (Linux/Unix):
So siehts aus (MS Windows):
Wenn Sie das Programm starten haben Sie bereits eine echten Texteditor vor
sich mit Copy und Paste und vielen weiteren Funktion (rechte Maustaste gedrückt halten über dem Text). Natürlich fehlt es dem Text-Editor noch an Lade und
Speicheroptionen und sonstigen Komfort.
Daher werden Sie jetzt Lade und Speicher-Funktionen hinzufügen. Des weiteren soll
der Texteditor auch Perl und Tk Skripts Interpretieren und Ausführen können.
#!/usr/bin/perl -w
use strict;
use Tk;
my ($mw, $frame,$frame2);
my ($text, $yscr, $xscr);
my ($fbut, $bxit);
my($m_file, $m_opti, $m_help);
my $input="noname.pl";
#Zuerst wieder ein Hauptfenster und ein Frame
$mw = MainWindow->new();
$frame = $mw->Frame();
$frame2 = $mw->Frame();
#Menübuttons
$m_file = $frame2->Menubutton(-text => "Datei",
-underline => 0);
$m_opti = $frame2->Menubutton(-text => "Ausführen",
-underline => 0);
$m_help = $frame2->Menubutton(-text => "Hilfe",
-underline => 0);
#Jetzt erstellen wir unser Text-Widget mit 2 Scrollbars in unserem Frame
$text = $frame->Text(-wrap => 'none');
$yscr = $frame->Scrollbar(-command =>
[yview => $text],
-orient => 'vertical');
$xscr = $frame->Scrollbar(-command =>
[xview => $text],
-orient => 'horizontal');
# Jetzt verbinden wir die beiden Scrollbars mit dem Text-Widget
$text->configure(-yscrollcommand => [ set => $yscr ]);
$text->configure(-xscrollcommand => [ set => $xscr ]);
#Jetzt packen wir wieder alles zusammen
$m_file->pack(-side => 'left', -fill => 'x');
$m_opti->pack(-side => 'left');
$m_help->pack(-side => 'left');
$frame2->pack(-side=>'top', -fill => 'x');
$frame->pack(-expand => 'yes', -fill => 'both');
$yscr->pack(-side => 'right', -fill => 'y');
$xscr->pack(-side => 'bottom', -fill => 'x');
$text->pack(-expand => 'yes', -fill => 'both',
-side => 'left');
$m_file->command(-label => "Neu",
-command => [\&neu, "neu"]);
$m_file->command(-label => "Öffnen",
-command => [\&open, "open"]);
$m_file->command(-label => "Speichern",
-command => [\&save, "speichern"] );
$m_file->command(-label => "Beenden",
-underline => 1,
-command => sub { exit 0; });
$m_opti->command(-label => "/usr/bin/perl -w $input",
-command => \&perl);
$m_help->command(-label => "Autor",
-command => sub{});
$m_help->command(-label => "Hilfe",
-command => sub{});
#Der Exit Button
$fbut = $mw->Frame()->pack();
$bxit = $fbut->Button(-text => 'Exit',
-command => [$mw => 'destroy']);
$bxit->pack(-side => 'left');
MainLoop;
sub file{}
sub neu{
my $tw=$mw->Toplevel(-title => 'Neu');
$tw->Label(-text => "Wie soll die Datei heißen : ")->pack;
my $in=$tw->Entry(-textvariable => \$input)->pack;
$in->bind('<Return>', [\&create, $tw]);}
#Erzeugen einer neuen Datei
sub create{
CORE::open (IFILE, ">> $input")
or die "can't create $input\n";
close(IFILE);
$_[1]->destroy; #Fenster wieder löschen
}
sub open{
my $tw=$mw->Toplevel(-title => 'Öffnen');
$tw->Label(-text => "Welche Datei wollen sie öffnen : ")->pack;
my $in=$tw->Entry(-textvariable => \$input)->pack;
$in->bind('<Return>', [\&read, $tw]);}
#Datei zum Lesen und Schreiben öffnen
sub read{
CORE::open (IFILE, "< $input")
or die "can't open $input\n";
while (<IFILE>) { # DON'T chop()
$text->insert("end", $_);
}
close(IFILE);
$_[1]->destroy; #Fenster wieder löschen
}
sub save{
my $tw=$mw->Toplevel(-title => 'Speichern');
$tw->Label(-text => "Speichern : $input")->pack;
my $in=$tw->Entry(-textvariable => \$input)->pack;
print $input , "\n";
$in->bind('<Return>', [\&write, $tw]);}
#Speichern der Eingabe
sub write{
my $alltext = $text->get("1.0", "end"); #Text vom Anfang bis Ende
CORE::open (IFILE, "+< $input")
or die "can't open $input\n";
print IFILE $alltext;
close(IFILE);
$_[1]->destroy; #Fenster löschen
}
sub perl{
system("/usr/bin/perl -w $input");
}
So siehts aus (Linux/Unix):
So siehts aus (MS Windows):
Das Programm können Sie natürlich Ihren Bedürfnissen anpassen oder weiterverarbeiten. Anhand
des Beispiels konnten Sie sehen wie einfach es ist mit Hilfe von Perl und Tk passable Programme zu schreiben. Neu ist in diesem Programm die Funktion ...
system("/usr/bin/perl -w $input");
... mit der Sie Programme oder Aktionen ausführen können wie wenn Sie diese in der Kommandozeile
eingeben würden.
|
|
 |
 |
 |