Schrift
[thread]4995[/thread]

Frage zu Tk::destroy()



<< >> 7 Einträge, 1 Seite
Froschpopo
 2005-05-01 07:27
#43893 #43893
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Also ne Verständnisfrage:
Code: (dl )
1
2
3
4
5
$frame = $mw->Frame()->pack();

$frame->Label(-text => 'nur ein test')->pack();

$frame->destroy();

wenn ich jetzt $frame->destroy() mache, wird dann auch das Label zerstört? In meinem Test verschwindet dann zwar auch dieses (ist ja logisch) aber ist dann auch der Speicher freigegeben? Muss ja nicht sein, dass etwas was ich nichtmehr benötige auch weiterhin im Speicher liegt.
coax
 2005-05-01 16:03
#43894 #43894
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Ja, wenn du destroy auf ein Widget anwendest werden auch die Kinderwidgets zerstoert.
Code: (dl )
1
2
3
4
5
6
  my $f = $mw->Frame->pack;
 my $l = $f->Label(-text => 'foo')->pack;

 $f->destroy;

 print "Label-Widget ", Tk::Exists($l) ? "existert noch!\n" : "existert nicht mehr!\n";


edit: btw  Kinderwidgets sind die, die ueber das Widget erzeugt werden und nicht die, die hineingepackt werden.\n\n

<!--EDIT|coax|1114949350-->
,,Das perlt aber heute wieder...'' -- Dittsche
Froschpopo
 2005-05-02 01:12
#43895 #43895
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
verstanden, aber wenn ich jetzt jetzt nur $f->Label(-text => 'foo')->pack; machen würde ohne es $l zuzuweisen, dann ist es ja auch weg.
coax
 2005-05-02 04:47
#43896 #43896
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=Froschpopo,01.05.2005, 23:12]verstanden, aber wenn ich jetzt jetzt nur $f->Label(-text => 'foo')->pack; machen würde ohne es $l zuzuweisen, dann ist es ja auch weg.[/quote]
Wie dann ist es weg ?

Auch wenn du das Objekt keiner weiteren Variable zuweist ist es trotzdem noch da und ueber die children-Methode zu erreichen.
Code: (dl )
1
2
# print alle meine Kinder...
print "$_\n" for $f->children();
,,Das perlt aber heute wieder...'' -- Dittsche
Froschpopo
 2005-05-02 04:59
#43897 #43897
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
hm wie wärs mit withdraw um es ganz wegzumachen? Ich brauchs ja danach nichtmehr !
coax
 2005-05-02 05:58
#43898 #43898
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Ich glaube du scheinst jetzt doch etwas missverstanden zu haben.
Code: (dl )
1
2
3
my $f = $mw->Frame()->pack();
$f->Label(-text => 'foo')->pack();
$f->destroy();

hier zerstoert destroy das Frame inklusive Label (weil es ein Kind des Frames ist)
Code: (dl )
1
2
3
my $f = $mw->Frame()->pack();
$mw->Label(-text => 'foo')->pack(-in => $f);
$f->destroy();

hier aber ist das Label ein Kind vom MainWindow und nicht vom
Frame, es wird zwar nicht mehr angezeigt, existiert aber noch.
,,Das perlt aber heute wieder...'' -- Dittsche
Strat
 2005-05-02 17:38
#43899 #43899
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
withdraw zerstoert nichts, es zeigt nur ein Toplevel nicht mehr an... z.B. mit ->deiconify und ->raise kann man das fenster wiederherstellen... ich benuetze diese kombination gerne, wenn ich ein fenster oefter brauche, damit ich es nicht jedesmal neu generieren muss, sondern brauche nur eventuell werte/felder zuruecksetzen
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 7 Einträge, 1 Seite



View all threads created 2005-05-01 07:27.