Home > Archive > PerlTk > December 2007 > Is a hash the best method to do this?
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Is a hash the best method to do this?
|
|
| vorticitywolfe@gmail.com 2007-12-24, 7:07 pm |
| Hello,
I have a gui which reads a lot of data and fills in a table of entry
widgets with the updated values for certain variables. I want to make
it more dynamic and be able to creates x by y number of entry widgets
on the fly. Right now, I have a program that works, but I have
thousands of lines of repeated code and it just keeps getting more
difficult to keep track of everything, particularly when I want to
change one thing. I wrote a previous post about defining variables
within a for loop, which sounded good to me until I read some of the
other posts on why this is bad. Hashes seem like they would work for
this, but as a novice, it seems a little over my head on how to
accomplish this.
From here on, I think the code can be cleaned up and I should only
have to define it once while still maintaining the flexibility to add
more rows/columns. Is that possible?
# N ROWS
########################################
########
@stn=(0...N-1);
my $left2a = $top->Frame()->pack(-side=>'left',-pady=>2,-padx=>7);
# N Columns
########################################
########
my $z0=$left2a->Label(-text=>'Time (Z)',)->pack();
my $z1=$left2a->Entry(-justify=>'center',-background=>'light green',-
width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
my $z2=$left2a->Entry(-justify=>'center',-background=>'light green',-
width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
my $z3=$left2a->Entry(-justify=>'center',-background=>'light green',-
width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
my $z4=$left2a->Entry(-justify=>'center',-background=>'light green',-
width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
my $z5=$left2a->Entry(-justify=>'center',-background=>'light green',-
width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
my $z6=$left2a->Entry(-justify=>'center',-background=>'light green',-
width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
my $z7=$left2a->Entry(-justify=>'center',-background=>'light green',-
width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
# FIRST STATION
########################################
########################
if ($string =~/$stn[0]/){
if($string =~ m/\d\d(\d\d\d\d)Z/){#if($string
=~ m/(\d\d\/d\d)/){
if (defined($1)) {
$time=$1;
}
}else{
$time="M";
}
$z1->delete('0.0','end');
$z1->insert('1.0',$time);
}
I hope this is clear enough, if not feel free to ask. Any suggestion
is helpful.
Thanks,
Jonathan
| |
| smallpond 2007-12-24, 7:07 pm |
| On Dec 24, 1:25 pm, vorticitywo...@gmail.com wrote:
> Hello,
>
> I have a gui which reads a lot of data and fills in a table of entry
> widgets with the updated values for certain variables. I want to make
> it more dynamic and be able to creates x by y number of entry widgets
> on the fly. Right now, I have a program that works, but I have
> thousands of lines of repeated code and it just keeps getting more
> difficult to keep track of everything, particularly when I want to
> change one thing. I wrote a previous post about defining variables
> within a for loop, which sounded good to me until I read some of the
> other posts on why this is bad. Hashes seem like they would work for
> this, but as a novice, it seems a little over my head on how to
> accomplish this.
>
> From here on, I think the code can be cleaned up and I should only
> have to define it once while still maintaining the flexibility to add
> more rows/columns. Is that possible?
>
> # N ROWS
> ########################################
########
> @stn=(0...N-1);
>
> my $left2a = $top->Frame()->pack(-side=>'left',-pady=>2,-padx=>7);
> # N Columns
> ########################################
########
> my $z0=$left2a->Label(-text=>'Time (Z)',)->pack();
> my $z1=$left2a->Entry(-justify=>'center',-background=>'light green',-
> width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
> my $z2=$left2a->Entry(-justify=>'center',-background=>'light green',-
> width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
> my $z3=$left2a->Entry(-justify=>'center',-background=>'light green',-
> width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
> my $z4=$left2a->Entry(-justify=>'center',-background=>'light green',-
> width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
> my $z5=$left2a->Entry(-justify=>'center',-background=>'light green',-
> width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
> my $z6=$left2a->Entry(-justify=>'center',-background=>'light green',-
> width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
> my $z7=$left2a->Entry(-justify=>'center',-background=>'light green',-
> width=>5,-borderwidth=>2,-relief=>'sunken')->pack();
>
> # FIRST STATION
> ########################################
########################
> if ($string =~/$stn[0]/){
> if($string =~ m/\d\d(\d\d\d\d)Z/){#if($string
> =~ m/(\d\d\/d\d)/){
> if (defined($1)) {
> $time=$1;
> }
>
> }else{
> $time="M";
> }
> $z1->delete('0.0','end');
> $z1->insert('1.0',$time);
> }
>
> I hope this is clear enough, if not feel free to ask. Any suggestion
> is helpful.
> Thanks,
> Jonathan
You can use a hash if you want to look up a specific
Entry by name (the hash key). Otherwise it may be
easier to use an array, and go through your entries
with a for loop.
my @entries;
for ($i=0; $i<8; $i++) {
$entries[$i] = $left2a->Entry(
-justify=>'center',
-background=>'light green',
-width=>5,
-borderwidth=>2,
-relief=>'sunken')->pack();
}
--S
|
|
|
|
|