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

How does one create a context menu in Perl/Tk ?

Replies are listed 'Best First'.
Re: context menu in Perl/Tk
by zentara (Cardinal) on Aug 16, 2007 at 17:33 UTC
    There are a few ways to do it, and it usually depends on what widget you are working with. Often some widgets have built-in bindings for Button-1, so you need to use a Button-2 or Button-3 binding. Basically, you just pop a menu at the pointerx, pointery location. There are so many ways to do it, that you need to show what code you are using. As a last resort, you can open a small toplevel window at the pointer location, and load it with whatever you desire.
    #!/usr/bin/perl use warnings; use strict; use Tk; my $mw = MainWindow->new; $mw->title("Listbox"); # For example purposes, we will use one word for each letter my @choices = qw/alpha beta charlie delta echo foxtrot golf hotel india juliet kilo lima motel nancy oscar papa quebec radio sierra tango uniform victor whiskey xray yankee zulu/; #Create the text box and insert the list of choices in to it my $lb = $mw->Scrolled("Listbox", -scrollbars => "osoe", -height => 20, -selectmode => "multiple") ->pack(-side => "left"); $lb->insert("end", sort @choices); my $m = $lb->Menu(-tearoff => 0,-title=>'None', -menuitems => [ [Button => "Delete", -command => \&do1], [Button => "Rename", -command => \&do2], ] ); $lb->bind("<Button-3>" => [ sub { $lb->focus; # focus on listbox widget my($w, $x, $y) = @_; $m->post($x, $y); }, Ev('X'), Ev('Y') ] ); $mw->Button(-text => "Exit", -command => sub{exit; })->pack(-side => "bottom"); $mw->Button(-text=>"View", -command => sub { foreach ($lb->curselection()) { print "$choices[$_]\n"; } })->pack(-side => "bottom"); MainLoop; # Popup menu actions. sub do1{ my @sels = $lb->curselection(); print "@sels\n"; @sels = map $choices[$_],@sels; print "action do1->@sels\n"; } sub do2{ my @sels = $lb->curselection(); print "@sels\n"; @sels = map $choices[$_],@sels; print "action do2->@sels\n"; }

    I'm not really a human, but I play one on earth. Cogito ergo sum a bum

      ok,i've been able to make a context menu thank you. now i'll just need to brush up some things.