Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^2: Need help finding which column/row the mouse cursor is over in Tk...

by bcarroll (Pilgrim)
on Feb 07, 2012 at 18:44 UTC ( [id://952325]=note: print w/replies, xml ) Need Help??


in reply to Re: Need help finding which column/row the mouse cursor is over in Tk...
in thread Need help finding which column/row the mouse cursor is over in Tk...

That works perfectly! And significantly reduces the amount of code!

FWIW, Here is the new code.

use warnings; use strict; use Tk; use Tk::Table; use Data::Dumper; my $buttonsPerRow = 5; $buttonsPerRow -= 1; my $row = 0; my $col = 1; my $buttonNum = 0; my @buttons; my $mw = tkinit(); my $menuFrame = $mw->Frame()->pack(-expand=>1,-fill=>'both'); my $buttonFrame = $mw->Frame()->pack(-expand=>1,-fill=>'both'); my $table = $buttonFrame->Table( -columns => 5, -scrollbars => 'se', -fixedrows => 1, )->pack(-expand=>1,-fill=>'both'); my $addButton = $menuFrame->Button( -text => 'Add Button', -command => sub{ $buttons[$buttonNum] = $table->Button(); print "Button $buttonNum->$row:$col\n"; $buttons[$buttonNum]{'row'} = $row; $buttons[$buttonNum]{'col'} = $col; $table->put($row,$col,$buttons[$buttonNum]); configureButton($buttonNum); $col>$buttonsPerRow?$row++:undef; $col>$buttonsPerRow?$col=1:$col++; $buttonNum++; }, )->pack(-side=>'top'); ################################ #DragNDrop my $isDragging = 0; #boolean - left mouse button pressed and dragging my $selectedButton = 0; $mw->bind('<Motion>', \&motion); ################################ $mw->MainLoop(); sub configureButton{ #configure the new button my $btnNum = shift; $buttons[$btnNum]->bind('<Enter>', sub{ $selectedButton = $btnNum; } ); $buttons[$btnNum]->configure( -text => "Button $btnNum", -command => sub{ print "Button $btnNum pressed\n"; } ); $buttons[$btnNum]->bind('<ButtonPress-1>', \&buttonPress); $buttons[$btnNum]->bind('<ButtonRelease-1>', \&buttonRelease); } sub motion { #what to do when the mouse is moving my($widget) = @_; my $e = $widget->XEvent; if ($isDragging){ findCell($e->X,$e->Y); } return unless $isDragging; } sub buttonPress { $isDragging = 1; } sub buttonRelease { #what to do when the left mouse button is released $isDragging = 0; } sub findCell{ my $tmpX = shift; my $tmpY = shift; my ( $row, $col ) = $table->Posn($table->containing($tmpX,$tmpY)); print "$tmpX:$tmpY: Row $row Col $col\n"; }
  • Comment on Re^2: Need help finding which column/row the mouse cursor is over in Tk...
  • Download Code

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (None)
    As of 2024-04-25 00:55 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      No recent polls found