lichtkind+2007-11-17 16:50:37--in Wxperl kannst du Widgets absolute positionen geben, aber normal werden sizer verwendet wie ichs da (
WxPerlTutorialKapitel5) gezeigt hab
Ja, vor diesem Kapitel habe ich schon ziemlich oft gesessen. Es ist mir nicht eingängig. Ich gehöre wohl nicht zur Zielgruppe dieser Tutorial-Art, zumindest konnte ich dem Kapitel weder entnehmen, wie ich denn nun zwei Elemente nebeneinander anordne, noch wie die einzelnen Bestandteile funktionieren.
Besser ist so etwas in diversen Tk-Büchern beschrieben, in denen Schritt für Schritt mit möglichst wenigen Elementen (und nicht gleich dem Inventar eines ganzen Taschenrechners) die Funktionsweise der Anordnung von Elementen veranschaulicht wird (und das sogar noch mit Bildern!).
Also, was muss ich denn nun machen, wenn ich eine solche Wx::StaticBox mit einem Element (dem Button) auf meiner Oberfläche anzuordnen?
Meine Vorstellung ist zur Zeit:
- ich erstelle eine Oberfläche (Wx::Frame)
- das ist die, die zu sehen sein wird wenn das Programm startet ($app->SetTopWindow($frame);)
- da drauf erstelle ich dann eine Umgebung zur Anordnung meiner Elemente der grafischen Oberfläche (die einzelnen Bereiche, Buttons, Textfelder usw): my $panel = Wx::Panel->new( $frame, -1);
- dann erstelle ich mir diese Elemente, die ich anordnen möchte:
a) den Bereich mit dem Titel: my $staticbox = Wx::StaticBox->new( $panel, -1, 'Wx::StaticBox' );
b) den Button, den ich gerne in dieser Box drin hätte: my $button = Wx::Button->new( $panel, -1, 'Button 3' );
So hier jetzt: Wie mache ich das, dass der Button in der Wx::StaticBox ist?
- abschließend sage ich dem Programm dann noch, dass diese Wx::StaticBox auf der Oberfläche angezeigt werden soll: $nsz->Add( $staticbox, 1, wxGROW|wxALL, 5 );
Dass der Programmcode da voller Fehler ist zeigt mir das Resultat auf (immerhin wird irgendwas angezeigt...).
Die Frage ist jetzt, wie es richtig geht.
Hier das, was ich aktuell vor mir habe:
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
38
39
40
use strict;
use warnings;
package ServusWelt;
use Wx qw/
wxGROW wxALL wxVERTICAL
/;
use base qw(Wx::App); # von Wx::App ableiten
sub OnInit {
my $app = shift;
my $frame = Wx::Frame->new( undef, # kein Eltern-Fenster
-1, # Fenter id
'Servus Welt', # Titel
[-1, -1], # Position x/y
[150, 150] # Größe x/y
);
$app->SetTopWindow($frame); # Fenster als oberstes bestimmen
my $panel = Wx::Panel->new( $frame, -1);
my $nsz = Wx::BoxSizer->new(wxVERTICAL);
my $staticbox = Wx::StaticBox->new( $panel, -1, 'Wx::StaticBox' );
my $button = Wx::Button->new( $panel, -1, 'Button 3' );
$nsz->Add( $staticbox, 1, wxGROW|wxALL, 5 );
#$nsz->Add( $button, 1, wxGROW|wxALL, 5 );
$frame->Show(1); # Fenster zeichnen
} # /OnInit
package main;
ServusWelt->new->MainLoop; # Programminstanz erzeugen und starten
Grüße, pktm