Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4825[/thread]

$listbox -> delete(): listbox Perl tk

Leser: 1


<< >> 6 Einträge, 1 Seite
nanook
 2004-08-23 22:40
#42552 #42552
User since
2004-07-28
6 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,
ich habe da ein Problem Einträge in einer Listbox zu löschen.
Code: (dl )
1
2
3
4
5
6
7
8
9
my @list = $listbox1->curselection;
foreach(@list){
my $del_list="$_\n";
chomp ($del_list);
my $del_index=$del_list."."."0";
print "$del_index\n";
$listbox1 -> delete('$del_index','$del_index');
#$listbox1 -> delete('2.0','2.0');
}

also  print "$del_index\n"; gibt z.B. 2.0 aus
       $listbox1 -> delete('2.0','2.0'); löscht den Eintrag aus der Box
aber $listbox1 -> delete('$del_index','$del_index'); klappt nicht :-(
Was mache ich falsch? Oder wie mache ich es besser?
Ich würde gerne die Einträge nachdem sie ausgewählt sind aus der
Listbox löschen.
Danke schon mal für eure Tipps
gruß nanook
JW
 2004-08-24 00:06
#42553 #42553
User since
2003-08-04
467 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Mmh, du solltest für das Interpolieren von Variablen lieber Anführungszeichen anstelle von Hochkommas verwenden.

"$del_index" anstelle von '$del_index'\n\n

<!--EDIT|JW|1093291607-->
ptk
 2004-08-24 12:51
#42554 #42554
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
->delete('2.0','2.0') funktioniert wahrscheinlich nur zufaellig, weil der Index als Float angenommen wird und intern nach "2" umgewandelt wird. Im Gegensatz zu Tk::Text gibt es bei Tk::Listbox nur die Zeile, also reicht '2'. Ausserdem glaube ich, dass du beim Loeschen einer Zeile nur ein Argument uebergeben brauchst.

Die Loesung fuer dein Problem hat ja schon JW gegeben.
nanook
 2004-08-24 20:32
#42555 #42555
User since
2004-07-28
6 Artikel
BenutzerIn
[default_avatar]
Thx,
mit " " funktioniert es
und man braucht nur ein Argument.
Gruß nanook
Dubu
 2004-08-27 02:21
#42556 #42556
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Die Anfuehrungszeichen sollten da ueberhaupt weg. Es gibt kaum einen guten Grund, "$foo" statt $foo zu schreiben.
master
 2005-09-23 13:14
#42557 #42557
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Hatte einen ähnlichen Code zum Löschen.
In Verbindung mit einer Mehrfachauswahl-Listbox.

Klappte aber nicht, da der "delete" jedesmal die index wieder ändert.

Beispiel-liste:
0 - A
1 - B
2 - C
3 - D

Übergibt man die beiden Index (0,3) zum löschen, passiert folgendes.

1. Eintrag mit index 0 wird gelöscht. Liste aktualisert und index neu verteilt. die Liste sieht jetzt so aus:

0 - B
1 - C
2 - D

2. In der Schlaufe kommt jetzt index 3 dran.. doch den gibt es  nicht mehr..  obwohl wir also index 0 und 3 löschen wollten, wurde nur 0 gelöscht.

ich habe das problem so gelöst, in dem ich die Liste mit den Index umkehre..

zuerst die höchten zulöschenden.. und dann runter..
vorher gab es ein Chaos und es wurde nur die hälfte gelöscht, jetzt klappts wunderbar...

Code: (dl )
1
2
foreach my $element(reverse(sort($listbox->curselection()))) 
{$listbox{'liste'}->delete($element);}
\n\n

<!--EDIT|master|1127467067-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
<< >> 6 Einträge, 1 Seite



View all threads created 2004-08-23 22:40.