Schrift
[thread]4915[/thread]

configure von außerhalb in sub hinein: bereits geöffnetes Toplevel updaten.



<< >> 7 Einträge, 1 Seite
Froschpopo
 2005-04-06 02:31
#43325 #43325
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Diesmal beschäftigen wir uns mit einer ganz neuen Thematik.
Ziel ist, den Titel des bereits geöffneten Toplevels zu ändern und dabei zu vermeiden dass sich erneut ein Fenster öffnet.

Gibts da noch ne andere Lösung? Weil dies hier würde viel schreibarbeit bedeuten:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
&window(); # Mit Standardeinstellung starten.

&window( { configure_title => 'Neuer Titel' }); # bereits gestartetes Toplevel updaten

sub window {
  if(!defined($_[0]->{configure_title})) {
        my $new_toplevel->Toplevel(-title => "Alter Titel");
  } else {
        $new_toplebel->configure(-title => $_[0]->{configure_title}
  }
}


Vielleicht hält Tk ja noch ein Geheimtipp für solche Fälle bereit?\n\n

<!--EDIT|Froschpopo|1112740373-->
Crian
 2005-04-06 03:27
#43326 #43326
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
So gehts jedenfalls nicht. Unter C könntest Du sowas machen mit statischen lokalen Variablen. In Perl könntest Du es höchstens machen, indem Du $new_toplevel (und nicht mit b schreiben ;-) außerhalb der Funktion definierst, etwa so:

Code: (dl )
1
2
3
4
5
6
7
8
{
my $new_toplevel;

sub window {
....
}

}


(Das geht allerdings nur, falls Du nur immer ein Fenster zur Zeit verwalten willst. Ansonsten musst DU die Fenstervariablen irgendwie außerhalb Deiner Funktion handeln.)
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
Froschpopo
 2005-04-06 03:40
#43327 #43327
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
also du meinst ich sollte mit Blöcken arbeiten...

START_WINDOW: { }
Crian
 2005-04-06 03:43
#43328 #43328
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ich weiß nicht wirklich, aber es wäre vielleicht eine Möglichkeit.
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
Froschpopo
 2005-04-06 03:49
#43329 #43329
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,06.04.2005, 01:27]So gehts jedenfalls nicht. Unter C könntest Du sowas machen mit statischen lokalen Variablen. In Perl könntest Du es höchstens machen, indem Du $new_toplevel (und nicht mit b schreiben ;-) außerhalb der Funktion definierst, etwa so:

Code: (dl )
1
2
3
4
5
6
7
8
{
   my $new_toplevel;

   sub window {
       ....
   }

}


(Das geht allerdings nur, falls Du nur immer ein Fenster zur Zeit verwalten willst. Ansonsten musst DU die Fenstervariablen irgendwie außerhalb Deiner Funktion handeln.)[/quote]
wozu is der äußere unbenannte block überhaupt gut ? Der schränkt doch im Grunde nur den Geltungsbereich von $new_toplevel ein.
Wenn der jetzt nen NAME: {} hätte, dann könnte man den ja wenigstens gezielt ansteuern
ptk
 2005-04-06 12:47
#43330 #43330
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Froschpopo,06.04.2005, 01:49]wozu is der äußere unbenannte block überhaupt gut ? Der schränkt doch im Grunde nur den Geltungsbereich von $new_toplevel ein.
Wenn der jetzt nen NAME: {} hätte, dann könnte man den ja wenigstens gezielt ansteuern[/quote]
Ein Block ist sehr schoen geeignet, um den Scope von lokalen Variablen einzuschraenken. Ich mache das auch oft, um kein close() schreiben zu muessen:

Code: (dl )
1
2
3
4
{
open my $fh, $datei or die $!;
# mach was $fh
} # close wird automatisch ausgefuehrt, weil $fh out-of-scope geht
Crian
 2005-04-07 17:09
#43331 #43331
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Inwiefern willst Du den Block denn gezielt ansteuern, oder besser gefragt: wofür?

Ich benutze aus dem selben Grund gerne Blöcke wie ptk: Um den Geltungsbereich von Variablen einzuschränken.
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
<< >> 7 Einträge, 1 Seite



View all threads created 2005-04-06 02:31.