Sehr Umfangreiche Webseite zum Programmieren in C Perl CGI, Skripting, Linux, SystemprogrammierungPerl Perl Kurs Skripting Tk-Modul use Tk; Tcl/Tk Text Tk Text Steuerelement Perl Skript Tk-Modul Tk use Tk Perl mit dem Tk-Modul Teil 14

Steuerelemente - Text          zurück zum Inhaltsverzeichnis

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):

Steuerelement Text Linux/Unix

So siehts aus (MS Windows):

Steuerelement Text 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):

Steuerelement Text Linux/Unix

So siehts aus (MS Windows):

Steuerelement Text 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.