"... is there a way to modify the Label of the pop-up buttons by clicking on my button "Change popup" without having to recreate my popup?"
Yes. You can add a '-postcommand' callback which uses the 'entryconfigure()' method to modify '-label'. All described in the Tk::Menu documentation.
In the example script below, you'll start with labels "A" and "B". These persist until the "Change me" button is used: the labels then change to "C" and "D". Using the "Change me" button again toggles these back to "A" and "B", and so on. If you don't want this toggling effect, disable the "Change me" button after the first use.
Some additional notes:
Here's the working, example script:
#!/usr/bin/env perl use warnings; use strict; use Tk; my $mw = MainWindow->new; my $text = $mw->Text()->pack; add_edit_popup($mw, $text); my $but = $mw->Button( -text => "Change me", -command => \&push_button, ); $but->pack(); MainLoop; { my (@labels, $label_group); INIT { @labels = ([qw{A B}], [qw{C D}]); $label_group = 0; } sub change_label_group { $label_group = $label_group ? 0 : 1; return; } sub add_edit_popup { my ($mw, $obj) = @_; my $menu = $mw->Menu(-tearoff=>0, -menuitems=>[ #[command=>"Move col to the right", -command=>[sub {MoveCo +lumn('right')}, $obj,]], #[command=>"Move col to the left", -command=>[sub {MoveCol +umn('left')}, $obj,]], [command=>$labels[$label_group][0], -command => sub { prin +t "right\n" }], [command=>$labels[$label_group][1], -command => sub { prin +t "left\n" }], ]); $menu->configure(-postcommand => sub { for my $i (0 .. $menu->index('last')) { $menu->entryconfigure($i, -label => $labels[$label_gro +up][$i]); } }, ); $obj->menu($menu); $obj->bind('<3>', ['PostPopupMenu', Ev('X'), Ev('Y'), ]); return $obj; } } sub push_button{ #change/configure #command=>"Move selected column to the right" #command=>"Move selected column to the left", change_label_group(); }
Finally, a couple of recommendations. Consider using more meaningful names (e.g. 'push_button' is a poor choice). Avoid global (file-scoped) lexical variables (e.g. '$text'); instead, use the smallest, lexical scope possible.
— Ken
In reply to Re: Tk change pupup label
by kcott
in thread Tk change pupup label
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |