Schrift
[thread]13048[/thread]

10 Buttons, 4 Reihen, 1 Schleife

Leser: 1


<< >> 8 Einträge, 1 Seite
Corey
 2009-01-25 20:38
#118313 #118313
User since
2009-01-25
2 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich versuche mit perl/tk einen kleinen Taschenrechner zu basteln, scheitere aber schon an der Anordnung der Buttons.
ich möchte die Buttons 0-9 in 4 Reihen:

1 2 3
4 5 6
7 8 9
0

Das ganze ließe sich natürlich wunderbar Button für Button lösen, aber ich habe gehofft, man kann das ganze auch über eine Schleife realisieren (for oder foreach).
Zwar kann ich mit einer for-Schleife die zehn Buttons realisieren, aber leider nur neben- oder untereinander.

Weiß jemand Rat?

Corey

p.s. Sollte die Lösung eigentlich auf der Hand liegen und ich sehe sie nur nicht, möchte ich meinen Anfängerstatus als Entschuldigung vorschieben ;)
There aint no computer in this rockNroll
Lynyrd Skynyrd
pktm
 2009-01-25 22:25
#118314 #118314
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Corey+2009-01-25 19:38:49--
p.s. Sollte die Lösung eigentlich auf der Hand liegen und ich sehe sie nur nicht, möchte ich meinen Anfängerstatus als Entschuldigung vorschieben ;)


Kommt drauf an, wenn es ein Geldschein auf meiner Hand ist vielleicht ^^, ansonsten steht die Lösung eher im Wiki: http://wiki.perl-community.de/bin/view/Wissensbasi...
http://www.intergastro-service.de (mein erstes CMS :) )
FoolAck
 2009-01-26 00:12
#118319 #118319
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
use warnings;
use Tk;

my $mw = MainWindow->new();

my $buttonID = 1;

for my $x (0 .. 2) {
for my $y (0 .. 2) {
$mw->Button(-text => $buttonID)->grid(-row => $x, -column => $y);
$buttonID++;
}
}

MainLoop();

Sowas? Die Null müsstest du dann noch einzeln machen. Für sowas ist "grid" gedacht.
Und ich würde für die Buttons noch einen eigenen Frame machen, also nicht einfach ins MainWindow "klatschen". (Hab ich halt nur hier gemacht, damit das Beispiel sich aufs Essentielle konzentriert.)
pktm
 2009-01-26 11:22
#118326 #118326
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Oha, habe das tk überlesen. Es gibt da auch noch CPAN:Tk::Table als Möglichkeit.
http://www.intergastro-service.de (mein erstes CMS :) )
Linuxer
 2009-01-26 11:44
#118327 #118327
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Corey+2009-01-25 19:38:49--
ich möchte die Buttons 0-9 in 4 Reihen:

1 2 3
4 5 6
7 8 9
0


Hm, vom Layout der Buttons wird das eher ein Telefon als ein Taschenrechner... ;o)

meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Crian
 2009-01-26 13:00
#118334 #118334
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Wie wäre es hiermit?

Code (perl): (dl )
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/perl

#------------------------------------------------------------------------------
# Pakete / Pragmas:
#------------------------------------------------------------------------------
use strict;
use warnings;

use Tk;

#------------------------------------------------------------------------------
# Mainwindow:
#------------------------------------------------------------------------------
my $mw = new MainWindow;

#------------------------------------------------------------------------------
# Buttonanordnung:
#------------------------------------------------------------------------------
my @textarray = (
    [qw/1 2 3/],
    [qw/4 5 6/],
    [qw/7 8 9/],
    [qw/0/]
);

#------------------------------------------------------------------------------
# Frames:
#------------------------------------------------------------------------------
my $f = $mw->Frame(
)->pack(
    -fill   => 'both',
    -expand => 1,
    -side   => 'top',
);
my @frames;
for (1 .. @textarray) {
    my $fx = $f->Frame(
    )->pack(
        -fill   => 'both',
        -expand => 1,
        -side   => 'top',
    );
    push @frames, $fx;
}

#------------------------------------------------------------------------------
# Buttons:
#------------------------------------------------------------------------------
my $frame_index = 0;
for my $texte (@textarray) {
    for my $text (@$texte) {
        my $b = $frames[$frame_index]->Button(
            -text    => "$text",
            -command => sub { print "Button '$text' wurde gedrueckt.\n" },
        )
        ->pack(
            -fill   => 'x',
            -ipadx  => 5,
            -side   => 'left',
            -fill   => 'both',
            -expand => 1,
        );
    }
    ++$frame_index;
}

MainLoop();



Das geht sicher kürzer / eleganter, aber irgendwas muss dir ja auch noch bleiben.
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
Corey
 2009-01-26 19:36
#118360 #118360
User since
2009-01-25
2 Artikel
BenutzerIn
[default_avatar]
Hallo,

zuerst mal ein "wow" für die Antworten. So schnell und so hilfreich habe ich das bisher eher selten erlebt.

Die Lösung von FoolAck wird wohl meine Wahl sein (auch weil ich Crians noch nicht ganz durchschaut habe ;) ). Ich werde auch noch mal die Tk-Table ansehen. Auf grid bin ich natürlich in meiner "Weitsicht" nicht gekommen.

Danke nochmal an euch und Daumen hoch

Corey
There aint no computer in this rockNroll
Lynyrd Skynyrd
Crian
 2009-01-27 13:01
#118388 #118388
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Ich hab doch extra den einzelnen Teilen Überschriften verpasst. Kopieren, laufen lassen, rumspielen.
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
<< >> 8 Einträge, 1 Seite



View all threads created 2009-01-25 20:38.