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

UtilFaqSubForm edit

Titel Wie zeige ich Textabschnitte in Tk::Text farbig an?
Autor ReneeBaecker
Bereich FaqTK
Tags Perl/Tk, Tk::Text
Topic revision: 2007-07-13, ReneeBaecker
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.