Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re^2: How to destroy and re-create bound widgets

by Phinix (Acolyte)
on Nov 05, 2012 at 01:40 UTC ( #1002263=note: print w/ replies, xml ) Need Help??


in reply to Re: How to destroy and re-create bound widgets
in thread How to destroy and re-create bound widgets

I did try createWindow... I'm still learning so I've been just experimenting and doing research trying to get the syntax right. Perhaps though you could explain why doing this:

my $canvaswindow = $canvas->createWindow(0,0, -window => $widget); $canvaswindow->Tk::bind('<Button-1>' => sub { &dostuff0 });

...gives me an error saying: "Global symbol "$canvaswindow" requires explicit package name at line 3."

I have created $widget before attempting this, of various types. Is it not possible to create custom event binds on canvas objects? If so, that is why I do not use createWindow. If it is possible I would love to know how.

EDIT: I was able to get things working after I realized that the createWindow method isn't so much creating a new object that gets a reference but rather more like saying "put me here" to a previously created object template.

So, the above instead becomes:

$canvas->createWindow(0,0, -window => $widget); $widget->Tk::bind('<Button-1>' => sub { &dostuff0 });
I'll post a full working example in a bit once I finish the translation. Thanks for all the helpful pointers and syntax examples though!


Comment on Re^2: How to destroy and re-create bound widgets
Select or Download Code
Replies are listed 'Best First'.
Re^3: How to destroy and re-create bound widgets
by zentara (Archbishop) on Nov 05, 2012 at 10:17 UTC
    It sounds like you, as a beginner, my want to reconsider your design. The first thing I have to say, is why do you need the overlapping secondary sub-canvases? If you can make something on your sub-canvas, you can do the same thing on the underlying canvas. You can still put a background image on the main canvas, then instead of overlaying other canvases, why not create rectangular regions on the base canvas? In any event, look at this example:
    #!/usr/bin/perl use warnings; use strict; use Tk; my $mw = new MainWindow; my $main = $mw -> Scrolled("Canvas",-scrollbars=>'e')-> pack(-side =>'left', -fill => 'both', -expand => 1); my $canvas = $main->Subwidget("canvas"); Tk::bind($canvas, '<MouseWheel>', [ sub {$canvas->yview('scroll', -($_[1] / 120) * 3,'units')}, Ev('D')]); my $see = "\nHaaa, See that and scroll!"; my $info = $main->createText(180, 15, -text => "$see", -font => 'Arial 11 bold' , -fill => 'red'); $main->configure(-scrollregion => [0,0,2000 , 2000]); my $canvas_cube = $main->Canvas(-width => 45, -height => 45, -background => 'green'); my $canvasWindow = $main->createWindow(75,75, -window => $canvas_cube) +; Tk::bind( $canvas_cube, '<Enter>' => sub { print "Enter\n"; }); Tk::bind( $canvas_cube, '<Leave>' => sub { print "Leave\n"; }); Tk::bind( $canvas_cube, '<Button-1>' => sub { print "1\n"; }); $canvas->focus; MainLoop;

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

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (6)
As of 2015-07-30 10:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (271 votes), past polls