Thread Rahmen in Tk: Frage zu Rahmen in Tk (9 answers)
Opened by Gast at 2006-12-03 11:11

ptk
 2006-12-03 13:03
#46008 #46008
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Guest,03.12.2006, 10:11]Hallo,
ich befasse mich zur Zeit intensiv mit Perl/Tk und habe dazu einige Fragen:
1. Ist es möglich, um ein Frame herum einen farbigen Rahmen zu machen?
[/quote]Nicht direkt. Es gibt zwar die Option -borderwidth, aber der erzeugte Rahmen hat immer eine Defaultfarbe, die entweder schwarz ist oder einen 3D-Effekt erzeugt und dabei die Hintergrundfarbe des Frames verwendet. Einfach mal mit -borderwidth und -relief spielen.

Als Workaround kann man ein Frame in einem anderen Frame schachteln und dabei verschiedene Hintergrundfarben verwenden. Siehe Skript unten.
Quote
2. Ich habe ein Frame gemacht mit 250x170 Pixel mit schwarzem Hintergrund. Ich möchte da gerne was hineinschreiben, aber wenn ich dann ein Label als "Kind-"Element (afaik nennt man das so) des Frames benutze, ist der Frame nicht mehr da, nur noch das Label. Kann mir also jemand sagen, wie ich in folgenden Frame was reinschreiben kann?
Code: (dl )
1
2
my $videofenster = $top -> Frame (-height => '170p', -width => '250p', -background => 'black');
$videofenster -> place(-x=>'7p', -y => '7p');
Ich nehme an, da hat die "geometry propagation" zugeschlagen. Die Größe eines Containerwidgets hängt nämlich von der Größe der enthaltenen Kinderwidgets ab. Typischerweise ist genau das, was man haben möchte; man muss sich somit nicht darum kümmern, wie groß das Containerwidget sein muss. Wenn man aber die Größe des Containerwidgets doch angeben möchte, muss man die "geometry propagation" ausschalten. Wenn man beispielsweise "pack" verwendet, macht man das mit $top->packPropagate(0). Siehe Beispiel unten.

Code: (dl )
1
2
3
4
5
6
7
use Tk;
$mw=tkinit;
$mw->packPropagate(0);
$fouter = $mw->Frame(-borderwidth => 10, -bg => "green")->pack(-fill => "both", -expand => 1);
$f=$fouter->Frame(-bg => "red")->pack(-fill => "both", -expand => 1);
$f->Label(-text => "hallo", -bg => "red")->place(-relx => 0.5, -rely => 0.5, -anchor => "c");
MainLoop;

View full thread Rahmen in Tk: Frage zu Rahmen in Tk