Leser: 3
10 Einträge, 1 Seite |
QuoteIch 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.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
2my $videofenster = $top -> Frame (-height => '170p', -width => '250p', -background => 'black');
$videofenster -> place(-x=>'7p', -y => '7p');
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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use strict;
use warnings 'all';
use Tk;
my $mw = tkinit;
$mw->Frame(-highlightbackground => "red",
-highlightthickness => 5,
-background => "black")->pack(qw/-fill both -expand 1/);
$mw->geometry("200x200");
MainLoop;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use strict;
use warnings 'all';
use Tk;
my $mw = tkinit;
my $f=$mw->Frame(-highlightbackground => "red",
-highlightthickness => 5,
-background => "black")->pack(qw/-fill both -expand 1/);
$f->Entry->pack;
$mw->geometry("200x200");
MainLoop;
1
2
3
4
5
6
use Tk;
$top = new MainWindow;
$top->packPropagate(0);
$f_outer = $top->Frame(-borderwidth => 10, -relief => "raised", -bg => "blue")->pack(qw(-fill both -expand 1));
$f_outer->Frame->pack(qw(-fill both -expand 1));
MainLoop;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
XColor *bgColorPtr; /* Background color (intensity
* between lightColorPtr and
* darkColorPtr). */
XColor *darkColorPtr; /* Color for darker areas (must free when
* deleting structure). NULL means shadows
* haven't been allocated yet.*/
XColor *lightColorPtr; /* Color used for lighter areas of border
* (must free this when deleting structure).
* NULL means shadows haven't been allocated
* yet. */
Pixmap shadow; /* Stipple pattern to use for drawing
* shadows areas. Used for displays with
* <= 64 colors or where colormap has filled
* up. */
GC bgGC; /* Used (if necessary) to draw areas in
* the background color. */
GC darkGC; /* Used to draw darker parts of the
* border. None means the shadow colors
* haven't been allocated yet.*/
GC lightGC; /* Used to draw lighter parts of
* the border. None means the shadow colors
* haven't been allocated yet. */
QuoteNicht schwer ist relativ. Das ist nicht die einzige Stelle, man muss wohl auch tkUnix3d.h, tkWin3d.h etc. ändern, sowie -bordercolor-Optionen in den Widget-Implementationen einführen (tkFrame.c, tkButton.c etc.). Aber vielleicht sollten wir mal abwarten, was die neue "themed tk"-Erweiterung bringen wird?Ich habe mir gerade mal tk3d.h angesehen, eigentlich sollte es doch nicht so schwer sein, zu implementieren, dass die Rahmen Farbe vom Benutzer bestimmt wird, oder?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
use strict;
use warnings 'all';
use Tk;
my $mw = tkinit;
$mw->Frame(-highlightbackground => "red",
-highlightcolor => "red",
-highlightthickness => 5,
-background => "black")->pack(qw/-fill both -expand 1/);
$mw->Entry->pack;
$mw->geometry("200x200");
MainLoop;
10 Einträge, 1 Seite |