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

TK Canvas: Group vs. tags

by dreadpiratepeter (Priest)
on Mar 26, 2004 at 16:56 UTC ( #340074=perlquestion: print w/replies, xml ) Need Help??

dreadpiratepeter has asked for the wisdom of the Perl Monks concerning the following question:

I've been doing a little TK work lately, and I was looking through my Emu book. I noticed that there is a new canvas item called Group, that collects other items and allows you to act on them as a unit.
Traditionally, I would just tag all the items with a unique tag and use it to act on the items.
So my question is: Is the Group type just syntactic sugar? Or are there performance and/or memory benefits to using groups?


-pete
"Ted Nugent called. He wants his shirt back."

Replies are listed 'Best First'.
Re: TK Canvas: Group vs. tags
by zentara (Archbishop) on Mar 26, 2004 at 18:54 UTC
    As an example of the usefulness of using groups in motion operations, show me how you would do this with just 'tags'.
    #!/usr/bin/perl use warnings; use strict; use Tk; my $mw = MainWindow->new(); # first create a canvas widget my $canvas = $mw->Canvas(width => 300, height => 200)->pack(); my $one = $canvas->createOval(5, 0, 20, 30, -fill => 'blue'); my $two = $canvas->createRectangle(0, 20, 50, 75, -fill => 'red'); my $group = $canvas->createGroup([0, 0], -members => [$one, $two]); my $dx = 1; my $dy = 1; my $id = Tk::After->new($canvas,10,'repeat', sub {$canvas->move($group, $dx,$dy); my ($x,$y) = $canvas->bbox($group); print "$x $y\n"; if($y >= 100){$dy = -1}; if($x >= 200){$dy = 1; $dx = -1}; if($x < -5){$dx=1;$dy=1}; }); my $ebutton = $mw->Button(-text => 'Exit', -command => 'Tk::exit')->pack(); my $sbutton = $mw->Button(-text => 'Stop', -command => sub{$id->cancel;})->pack(); MainLoop();

    I'm not really a human, but I play one on earth. flash japh
      Like this:
      #!/usr/bin/perl use warnings; use strict; use Tk; my $mw = MainWindow->new(); # first create a canvas widget my $canvas = $mw->Canvas(width => 300, height => 200)->pack(); my $one = $canvas->createOval(5, 0, 20, 30, -fill => 'blue',-tags => +['fred']); my $two = $canvas->createRectangle(0, 20, 50, 75, -fill => 'red',-tags + => ['fred']); #my $group = $canvas->createGroup([0, 0], -members => [$one, $two]); my $group='fred'; my $dx = 1; my $dy = 1; my $id = Tk::After->new($canvas,10,'repeat', sub {$canvas->move($group, $dx,$dy); my ($x,$y) = $canvas->bbox($group); print "$x $y\n"; if($y >= 100){$dy = -1}; if($x >= 200){$dy = 1; $dx = -1}; if($x < -5){$dx=1;$dy=1}; }); my $ebutton = $mw->Button(-text => 'Exit', -command => 'Tk::exit')->pack(); my $sbutton = $mw->Button(-text => 'Stop', -command => sub{$id->cancel;})->pack(); MainLoop();
      Update: Actually I can see the usefulness for rotation. But for motion, and state-changes and such the two methods appear the same.


      -pete
      "Worry is like a rocking chair. It gives you something to do, but it doesn't get you anywhere."
        Well, I'm out of XP today, but I would give you one for that. :-)

        I'm not really a human, but I play one on earth. flash japh
Re: TK Canvas: Group vs. tags
by zentara (Archbishop) on Mar 26, 2004 at 18:25 UTC
    I'm not sure about the standard Tk Canvas 'group', but in Tk::Zinc( an enhanced canvas ) , groups are very important in doing things like rotations and motion. Maybe this would be a good question for comp.lang.perl.tk where those experts can explain the c code behind it all.

    For instance, if you tried to rotate a bunch of "tags", they would all rotate independently; but if they are grouped, you can specify the group center point, where they would rotate around.


    I'm not really a human, but I play one on earth. flash japh

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2021-05-09 14:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Perl 7 will be out ...





    Results (100 votes). Check out past polls.

    Notices?