ein Kapitel zurück                                           ein Kapitel weiter

Was fehlt uns jetzt noch für einen Texteditor? Richtig ein Widget mit dem wir unserem 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 :

Text Perl Tk

Wenn sie das Programm starten haben sie bereits eine echten Texteditor vor Ihnen 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.

Zum Schluss wollen wir unseren Text-Editor Lade und Speicher-Funktionen hinzufügen. Des weiteren soll unser 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('}

#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('}

#Datei zum Lesen und Schreiben öffnen
sub read{
  CORE::open (IFILE, "<&nbsp;$input")
            or die "can't open $input\n";
  while (        # 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('');
  }


#Speichern der Eingabe
sub write{
 my $alltext = $text->get("1.0""end");  #Text vom Anfang bis Ende
  CORE::open (IFILE, "+<&nbsp;$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 :

Text Perl Tk

Das Programm können natürlich Ihren Bedürfnissen anpassen oder weiterverarbeiten. Anhand diesem Beispiels können 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 eingegeben haben. Sollten sie jetzt Feuer gefangen haben Programm mit Perl/Tk zu schreiben empfehle ich Ihnen das Buch :

Einführung in Perl/ TK.
von Nancy Walsh
für 69DM.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf