Wie zeige ich Textabschnitte in Tk::Text farbig an?
Inhalt:
Ein häufig verwendetes Widget bei Perl/Tk ist Tk::Text. Doch manchmal soll nicht nur einfach Text dargestellt werden, sondern Teile sollen farbig markiert werden.
Beispiel 1
#!/usr/bin/perl
use strict;
use warnings;
use Tk::Text;
use Tk;
my $mw = tkinit;
my $text = $mw->Text()->pack;
$text->tagConfigure('red_text', -foreground => 'red');
while( my $inhalt = <DATA> ){
if( $inhalt =~ /^Fehler:/ ){
$text->insert('end',$inhalt,'red_text' );
}
else{
$text->insert('end',$inhalt );
}
}
MainLoop;
__DATA__
Dies ist ein Test!
Fehler: Laeuft nicht
Eine Zeile dazwischen.
Noch eine Zeile
Fehler: fehlerhafte Zeile
Fehler: noch ein Fehler
Alles ok!
Beispiel 2
Man kann auch bei jeder farbigen Zeile ein tagAdd machen:
#!/usr/bin/perl
use strict;
use warnings;
use Tk::Text;
use Tk;
my $mw = tkinit;
my $text = $mw->Text()->pack;
my $line = 0;
while( my $inhalt = <DATA> ){
$text->insert('end',$inhalt );
++$line;
if( $inhalt =~ /^Fehler:/ ){
$text->tagAdd('red_text',$line . ".0" , $line . "." . length $inhalt);
$text->tagConfigure('red_text', -foreground => 'red');
}
}
MainLoop;
__DATA__
Dies ist ein Test!
Fehler: Laeuft nicht
Eine Zeile dazwischen.
Noch eine Zeile
Fehler: fehlerhafte Zeile
Fehler: noch ein Fehler
Alles ok!
Beispiel 3
Das Beispiel 2 hat den Nachteil, dass man selbst die Zeilen mitzählen muss. ptk hat im Forum gezeigt, wie man das ganze einfacher gestalten kann:
Man ersetze
$text->tagAdd('red_text',$line . ".0" , $line . "." . length $inhalt);
durch
$text->tagAdd('red_text', 'end -1 lines' , 'end -1 chars');
Ergänzungen, Kommentare
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff