Zuweisung von Tags
am 15.11.2006 23:56:08 von Mike Wesling
Hallo,
ich wollte über 2 verschiedene Buttons einem Text-Widget bestimmte Tags
zuweisen:
$text->tagConfigure('b1', -spacing1 => 10, -foreground => "red", -font
=> "lucidasans-bold-18");
$text->tagConfigure('b2', -foreground => "blue");
Beim Klicken auf den jeweiligen Button soll 'b1' oder 'b2' zugewiesen
werden. Ich habe im -command-Tag eine Aufruf einer Prozedur zum
hinzufügen der Tags gemacht:
sub addtag {
my $tag = $_[0];
$text->tagAdd($tag, '1.0', '1.0 lineend'), '3.0', '3.0 lineend');
}
Frage, wieso kann ich, nachdem ich einmal "b2" gesetzt habe, durch
drücken des anderen Buttons "b1" dann nicht mehr setzen? Die Farbe rot
erscheint nicht mehr, aber die Schriftart und spacing1 wird entsprechend
dem 'b1'-Tag verändert. Zurück geht das nicht mehr. Mich würde mal
interessieren, wieso das so ist?
Re: Zuweisung von Tags
am 16.11.2006 00:53:56 von Ch Lamprecht
Mike Wesling schrieb:
> Hallo,
>
> ich wollte über 2 verschiedene Buttons einem Text-Widget bestimmte Tags
> zuweisen:
>
> $text->tagConfigure('b1', -spacing1 => 10, -foreground => "red", -font
> => "lucidasans-bold-18");
> $text->tagConfigure('b2', -foreground => "blue");
>
>
> Beim Klicken auf den jeweiligen Button soll 'b1' oder 'b2' zugewiesen
> werden. Ich habe im -command-Tag eine Aufruf einer Prozedur zum
> hinzufügen der Tags gemacht:
>
> sub addtag {
> my $tag = $_[0];
> $text->tagAdd($tag, '1.0', '1.0 lineend'), '3.0', '3.0 lineend');
> }
>
> Frage, wieso kann ich, nachdem ich einmal "b2" gesetzt habe, durch
> drücken des anderen Buttons "b1" dann nicht mehr setzen? Die Farbe rot
> erscheint nicht mehr, aber die Schriftart und spacing1 wird entsprechend
> dem 'b1'-Tag verändert. Zurück geht das nicht mehr. Mich würde mal
> interessieren, wieso das so ist?
Hallo,
weil du zwar neue tags zuweist, die alten aber nicht löschst. Es wäre sowieso
sinnvoller ein einziges Tag und tagConfigure() zu benutzen, schliesslich sind
die tags dazu gedacht *verschiedene* Untermengen deines Textes zu definieren, an
die dann Attribute zugewiesen werden. Das brauchst du hier scheinbar gar nicht.
Christoph
P.S. Ich gehe davon aus, dass du Tk::Text meinst.
Re: Zuweisung von Tags
am 16.11.2006 09:17:37 von Mike Wesling
Ch Lamprecht schrieb:
>> $text->tagConfigure('b1', -spacing1 => 10, -foreground => "red", -font
>> => "lucidasans-bold-18");
>> $text->tagConfigure('b2', -foreground => "blue");
>>
>> [...]
>>
>> sub addtag {
>> my $tag = $_[0];
>> $text->tagAdd($tag, '1.0', '1.0 lineend'), '3.0', '3.0 lineend');
>> }
>
> Hallo,
>
> weil du zwar neue tags zuweist, die alten aber nicht löschst. Es wäre
> sowieso
> sinnvoller ein einziges Tag und tagConfigure() zu benutzen, schliesslich
> sind
> die tags dazu gedacht *verschiedene* Untermengen deines Textes zu
> definieren, an
> die dann Attribute zugewiesen werden. Das brauchst du hier scheinbar gar
> nicht.
Das bedeutet also, sobald ich ein Tag über tagAdd(...) zuweise, werden
nur die Optionen gespeichert, die noch nie gesetzt wurden oder wie ist
das zu verstehen? Also sprich, wenn ich schon einmal die Farbe über ein
Tag gesetzt hatte, dann kann in einem weiteren tagAdd(...) die
Farb-Option nicht mehr wirksam sein, sondern nur noch diese Optionen,
die bisher noch nicht gesetzt wurden?
Meine Feststellung war ja, dass ich mit Setzen von 'b2' keine
Möglichkeit mehr habe, die Farbe über das 'b1' Tag auf rot zu setzen,
sondern es kommen dann nur noch -spacing1 und -font zum bereits
gesetzten 'b2' hinzu.
Dachte das wäre sowas wie "konfiguriere ein Tag" und "füge es der
Textstelle hinzu", also quasi so, dass alte Einstellungen auch wieder
durch neue verloren gehen können.
> P.S. Ich gehe davon aus, dass du Tk::Text meinst.
Ja, hatte das Tk:: vergessen
Re: Zuweisung von Tags
am 16.11.2006 15:04:33 von Ch Lamprecht
Mike Wesling schrieb:
> Ch Lamprecht schrieb:
>
>>> $text->tagConfigure('b1', -spacing1 => 10, -foreground => "red",
>>> -font => "lucidasans-bold-18");
>>> $text->tagConfigure('b2', -foreground => "blue");
>>>
>>> [...]
>>>
>>> sub addtag {
>>> my $tag = $_[0];
>>> $text->tagAdd($tag, '1.0', '1.0 lineend'), '3.0', '3.0 lineend');
>>> }
>>
>>
>> Hallo,
>>
>> weil du zwar neue tags zuweist, die alten aber nicht löschst. Es wäre
>> sowieso
>> sinnvoller ein einziges Tag und tagConfigure() zu benutzen,
>> schliesslich sind
>> die tags dazu gedacht *verschiedene* Untermengen deines Textes zu
>> definieren, an
>> die dann Attribute zugewiesen werden. Das brauchst du hier scheinbar
>> gar nicht.
>
>
> Das bedeutet also, sobald ich ein Tag über tagAdd(...) zuweise, werden
> nur die Optionen gespeichert, die noch nie gesetzt wurden oder wie ist
> das zu verstehen? Also sprich, wenn ich schon einmal die Farbe über ein
> Tag gesetzt hatte, dann kann in einem weiteren tagAdd(...) die
> Farb-Option nicht mehr wirksam sein, sondern nur noch diese Optionen,
> die bisher noch nicht gesetzt wurden?
>
> Meine Feststellung war ja, dass ich mit Setzen von 'b2' keine
> Möglichkeit mehr habe, die Farbe über das 'b1' Tag auf rot zu setzen,
> sondern es kommen dann nur noch -spacing1 und -font zum bereits
> gesetzten 'b2' hinzu.
>
> Dachte das wäre sowas wie "konfiguriere ein Tag" und "füge es der
> Textstelle hinzu", also quasi so, dass alte Einstellungen auch wieder
> durch neue verloren gehen können.
>
perldoc Tk::Text
There may be any number of tags associated with characters in a text. Each tag
may refer to a single character, a range of characters, or several ranges of
characters. An individual character may have any number of tags associated with it.
A priority order is defined among tags, and this order is used in implementing
some of the tag-related functions described below. When a tag is defined (by
associating it with characters or setting its display options or binding
callbacks to it), it is given a priority higher than any existing tag. The
priority order of tags may be redefined using the ``$text->tagRaise'' and
``$text->tagLower'' methods.
If a character has several tags associated with it, and if their display options
conflict, then the options of the highest priority tag are used. If a particular
display option hasn't been specified for a particular tag, or if it is specified
as an empty string, then that option will never be used; the
next-highest-priority tag's option will used instead. If no tag specifies a
particular display option, then the default style for the widget will be used.
HTH, Christoph
>
>> P.S. Ich gehe davon aus, dass du Tk::Text meinst.
>
>
> Ja, hatte das Tk:: vergessen