Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Re: Syntax error using Tk

by eoin (Monk)
on Feb 17, 2004 at 10:25 UTC ( [id://329548]=note: print w/replies, xml ) Need Help??


in reply to Re: Syntax error using Tk
in thread Syntax error using Tk

Thanks this really helped. You see I was unaware that you couldn;t mix and match geometry managers. I had used pack for my display widget, and then grid for my buttons. This apparently was causing my script to hang.
Also cheers for pointing out about binding keystrokes, I had clean forgoten about that.

Nollaig Shona, Eoin...

Replies are listed 'Best First'.
Re: Re: Re: Syntax error using Tk
by JamesNC (Chaplain) on Feb 17, 2004 at 13:37 UTC
    You can mix geometry managers using frames. A common approach is to use a grid manager on some widgets inside of a frame. And to pack that frame along with others. Once you get the hang of using frames, it be easy to design any layout.
      Thanks for the advice. I looked into Frames and this is what I came up with. Although I am still having a small problem:
      my $mw = new MainWindow(-title => 'Calc', -bg => 'blue'); $mw->geometry("300x300"); my $topframe = $mw->Frame(-height => '60', -width => '300', -bg => 'bl +ack'); my $btmframe = $mw->Frame(-height => '225', -width => '300', -bg => 'r +ed'); my $display = $topframe->Entry(-justify => 'right', -state => 'disabled', -textvariable => \$calc) ->pack(-expand => '1', -fill => 'x', -pady => 30, -padx => 20, -side => 'right'); $mw->bind("<KeyRelease>" , sub { &keypress } ); for my $i ( qw/ 7 8 9 4 5 6 1 2 3 0 . C / ) { $button{$i} = $btmframe->Button(-text => "$i", -width => '3', -height => '1', -command => sub { &btnpress($i) }) ->grid(-row => $row, -column => $column, -padx => 2, -pady => 2, -sticky => 'nsew', -ipadx => 10, -ipady => 10); $column++; if($column > 2){$column = 0; $row++;} } $topframe->pack(-side => 'top', -expand => '0', -fill => 'x'); $btmframe->pack(-side => 'top', -expand => '1', -fill => 'both'); MainLoop;
      I want to make it so the buttons will expand to fill the frame, so when thw window is resized the buttons will resize accordingly. Is this possible??
      What do you think?
      The frames are coloured just for testing purposes.

      Nollaig Shona, Eoin...

      Nollaig shona duit.

        I would do it like so (ie, not use grid )

        #!/perl/bin/perl -w use strict; use Tk; use Tk::Button; use Tk::Entry; my $row = 0; my $column = 0; my $calc = "0.00"; my $buffer; my %button; my $mw = new MainWindow(-title => 'Calc', -bg => 'blue'); $mw->geometry("300x300"); my $topframe = $mw->Frame(-height => '40', -width => '300', -bg => 'bl +ack'); $topframe->pack(-side => 'top', -expand => '0', -fill => 'x', -anchor, + 'nw'); my @rows; push @rows, $mw->Frame()->pack( -expand, 1, -fill, 'both', -side, 'top +', -padx, 3, -pady,3) for (0..3); my $display = $topframe->Entry(-justify => 'right', -state => 'disabled', -textvariable => \$calc) ->pack(-expand => '1', -pady => '20', -padx => '30', -fill => 'x', -side => 'left'); $mw->bind("<KeyRelease>" , sub { &keypress } ); my $r =0; my $w = 0; for my $i ( qw/ 7 8 9 4 5 6 1 2 3 0 . C / ) { $button{$i} = $rows[$r] ->Button(-text => "$i", -width => '3', -height => '1', -command => sub { &btnpress($i) }) ->pack( -expand, 1, -fill, 'both', -side, 'le +ft', -padx, 2); $w++; if( $w == 3){ $r++; $w= 0; } } MainLoop; sub btnpress{ my $num = shift; if($num ne "C"){ $buffer .= $num; $calc = sprintf "%0.2f", $buffer; } if($num eq "C"){ $calc = "0.00"; $buffer = 0.00; } } sub keypress{ my $widget = shift; my $e = $widget->XEvent; # get event object my $key = $e->K; $key=~s/period/\./ig; if( $key =~/c/ig ){ $key = uc $key; $button{$key}->invoke; } if( $key =~/(\d)|\./){ &numpress($key); } }


        JamesNC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://329548]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2024-04-20 04:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found