Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: How to control a Tk::AbstractCanvas with a second one

by Anonymous Monk
on Nov 29, 2012 at 09:33 UTC ( #1006217=note: print w/ replies, xml ) Need Help??


in reply to How to control a Tk::AbstractCanvas with a second one

My code is something like this ...

Why don't you start with ex/chvw.pl, it shows this exactly?

Ctrl+MouseRight zooms the first canvas, and the second canvas

Ctrl+MouseMiddle moves the first canvas, and the second canvas

LeftMouse rotates the first canvas, doesn't do much for the second :)


Comment on Re: How to control a Tk::AbstractCanvas with a second one
Re^2: How to control a Tk::AbstractCanvas with a second one
by Anonymous Monk on Nov 29, 2012 at 09:34 UTC
Re^2: How to control a Tk::AbstractCanvas with a second one
by Anonymous Monk on Nov 29, 2012 at 10:44 UTC

    And here it is, busywork

    #!/usr/bin/perl -- use strict; use warnings; use Tk; use Tk::AbstractCanvas; { my $mwin = my $mw = tkinit; my $acnv = $mwin->AbstractCanvas()->pack(-expand => 1, -fill => 'b +oth'); $acnv->controlNav(1); # advanced CtrlKey+MouseDrag Navigation $acnv->rectToPoly(1); $acnv->ovalToPoly(1); my $rect = $acnv->createRectangle( 7, 8, 24, 23, -fill => 'r +ed'); my $oval = $acnv->createOval( 23, 24, 32, 27, -fill => 'gre +en'); my $line = $acnv->createLine( 0, 1, 31, 32, -fill => 'bl +ue', -arrow => 'la +st'); my $labl = $mwin->Label(-text => 'Hello AbstractCanvas! =)'); my $wind = $acnv->createWindow(15, 16, -window => $labl); $acnv->CanvasBind('<x>' => \&exit); $acnv->CanvasFocus(); $acnv->viewAll(); my $c2 = $mwin->Canvas( -background => 'black', #~ -width => 100, #~ -height => 100, #~ -width => 20, #~ -height => 20, -width => 30, -height => 30, ); $c2->createOval(0, 0, 5, 5, -fill => 'white',-tags => ['shabba'] ) +; $mw->bind( $c2, '<ButtonPress-1>' => [ \&shabba , $acnv ]); $c2->place( qw/ -x 10 -y 10 / ); } MainLoop; sub shabba { my( $c2, $acnv ) = @_; #~ my $c2 = $Tk::event->W; my $x = $Tk::event->x; my $y = $Tk::event->y; #~ use Data::Dump; #~ dd [ $c2->configure ], [ $c2->itemconfigure( 'shabba' )] ; $c2->coords( 'shabba', $x, $y , $x+5, $y+5); # size is 5 my $width = $c2->cget('-width'); my $height = $c2->cget('-height'); my $xview = $x / $width; my $yview = $y / $height; $acnv->xviewMoveto( $xview ); $acnv->yviewMoveto( $yview ); }

    See also Tk::Zinc / http://web.archive.org/web/20061020033841/http://www.tkzinc.org/

Re^2: How to control a Tk::AbstractCanvas with a second one
by KuntalBhusan (Acolyte) on Nov 29, 2012 at 14:57 UTC
    Thanks for the reply....but I actually wanted the reverse...I want to move the orange rectangle in the second canvas (which will have a scaled down view of the original) and the first canvas display should move appropriately...is it possible ?
        Ya...my concern was in moving the rectangle (rather dragging it to pan the main canvas view). I am now able to do it almost the way I wanted but in a different way...using the rubber band zoom function the Canvas2 and applying the effect in Canvas1...works like a charm :)
        ## $can is the canvas displaying the main graph and $can_1 is the cont +roller canvas... $can_1->configure(-bandColor => 'orange'); $can_1->CanvasBind('<Button-1>' => sub {$can_1->Canvas +Focus; $can_1->rubberBand(0)}); $can_1->CanvasBind('<B1-Motion>' => sub {$can_1->rubberBand(1) +}); $can_1->CanvasBind('<ButtonRelease-1>' => sub { my @box = $can_1->rubberBand(2); $can->viewArea(@box) });
        Thanks for all the help I got....Happy coding

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (11)
As of 2014-11-28 16:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (198 votes), past polls