Schrift
[thread]4980[/thread]

Text::insert() und Newline

Leser: 1


<< >> 7 Einträge, 1 Seite
Froschpopo
 2005-04-29 02:14
#43815 #43815
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich hab nen einfaches insert().
Ich möchte, dass jedes Insert in eine eigene Zeile kommt.
Bisher löse ich das so:
Code: (dl )
$textframe->insert('end', $string."\n");

funktioniert prima. Jedoch muss ich dann immer in dem letzten insert() das Newline wieder entfernen, weil sonst die unterste Reihe in dem Text() immer leer ist (weil dort ja ein zeilenumbruch ist).
gibt es eigentlich eine option von insert(), welche für neue Einträge auch eine eigene zeile beginnt ?
Dubu
 2005-04-29 11:01
#43816 #43816
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Code: (dl )
$textframe->insert('end', "\n".$string);

oder was?
Froschpopo
 2005-04-29 11:21
#43817 #43817
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
dann ist ja die erste Zeile wieder leer.... du hast es nur umgedreht :D
ptk
 2005-04-29 13:27
#43818 #43818
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Guck doch einfach nach, ob "end" am Anfang steht. Ungetestet: $text->index("end") eq "1.0"
Froschpopo
 2005-04-29 13:52
#43819 #43819
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
achso, ich könnt natürlich auch jedesmal in jeder zeile das erste argument von insert um 1.0 erhöhen... hatte nur gehofft dass es noch einfacher geht aber damit muss ich dann wohl leben
Crian
 2005-04-29 16:28
#43820 #43820
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Nein, so nicht, ich denke Du kannst Dir vermutlich eine Funktion ungefähr so schreiben:

Code: (dl )
1
2
3
4
5
6
sub insert_line {
my ($widget, $pos, $text) = @_;

$widget->insert('end', "\n") unless $text->index("end") eq "1.0";
$widget->insert('end', $text);
}


>>> ungetestet <<<
(Ok, man kann auch einen Aufruf aus den beiden machen etc. pp, aber teste doch mal, ob das so funktioniert.)


Edit: Falls das so nicht geht, probier mal

Code: (dl )
... unless $text->index("end") eq $text->index("1.0");



Edit2: Allerdings:

Code: (dl )
1
2
...>perl -MTk -e "$w = new MainWindow;$t = $w->Text()->pack; print '[' . $t->index('1.0') . '] [' . $t->index('end') . ']';"
[1.0] [2.0]


?\n\n

<!--EDIT|Crian|1114784447-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2005-05-02 15:12
#43821 #43821
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Anscheinend gibt es immer eine Leerzeile bei Tk::Text.

Ein Tipp zu Einzeilern: leider muss man Einzeiler unter DOS mit "..." schreiben, waehrend man unter Unix '...' verwenden muss (wegen Interpolation von Variablen etc.). Das haendische Umwandeln des Anfangs- und Endanfuehrungszeichens ist noch OK, aber wenn im Text auch noch Anfuehrungszeichen vorkommen, sollte man diese lieber mit q{...} und qq{...} schreiben.
<< >> 7 Einträge, 1 Seite



View all threads created 2005-04-29 02:14.