I have done all I wanted except that all the options of the menu are not displayed when the cell is picked.
This is shown in the revised code below.
Note the menu is onyl shonw when a cell the column headed 6 is selected.
It would be great if someone can explain how this missing step can be done
#!/usr/bin/perl use strict "vars"; use Tk; use Tk::TableMatrix; require Tk::LabEntry; my $mw = MainWindow->new; # items to help with cell menus my ($menuTest, $last_browse_row, $last_browse_col); my $arrayVar = {}; print "Filling Array...\n"; my ($rows,$cols) = (200, 10); foreach my $row (0..($rows-1)){ foreach my $col (0..($cols-1)){ $arrayVar->{"$row,$col"} = 2*$row + 3*$col; } } print "Creating Table...\n"; ## Test out the use of a callback to define tags on rows and columns sub colSub{ my $col = shift; return "OddCol" if( $col > 0 && $col%2) ; } my $t = $mw->Scrolled('TableMatrix', -rows => $rows, -cols => $cols, -width => 10, -height => 10, -titlerows => 1, -titlecols => 1, -variable => $arrayVar, -coltagcommand => \&colSub, -colwidth => 20, -browsecommand => \&brscmd, -colstretchmode => 'last', -rowstretchmode => 'last', -selectmode => 'extended', -selecttitles => 0, -drawmode => 'slow', -scrollbars=>'se' ); # existing ---------------------------------- #HERE IS WHERE I TRY TO USE BUTTONS #my $buttonTest = $mw->Button(-text => "test", -command => \&table_but +ton); # $t->set("3,3", $buttonTest); #wrong #$t->windowConfigure("2,2", -window => $buttonTest); #right # new ================================== # option menu test my @colour_list = (1,2,3,4,5,6,7,8,9,10,15,20,30,40,custom); my $sel_item; # diaglog box when chosen colour is custom my $dbox = $mw->DialogBox (-title => 'Custom Colour', -buttons => ['Ok', 'Cancel'], -default_button => 'Ok'); my $custom_colour; $dbox->add('LabEntry', -textvariable => \$custom_colour, -width => 20, -label => 'Qty Required', -labelPack => [-side => 'left'])->pack; # second mneu for hide test my $sel2_item; my $menuTest2 = $mw->Optionmenu( -variable => \$sel2_item, -options => [@colour_list], -command => \&menu_used2); $t->windowConfigure("4,4", -window => $menuTest2); # hide the 2nd menu #$menuTest2->packForget(); # diaglog box when chosen colour is custom my $dbox2 = $mw->DialogBox (-title => 'Custom Colour', -buttons => ['Ok', 'Cancel'], -default_button => 'Ok'); my $custom_colour2; $dbox2->add('LabEntry', -textvariable => \$custom_colour, -width => 20, -label => 'Qty Required', -labelPack => [-side => 'left'])->pack; # new ================================== # radio button test my $rb = 'N'; my $rb1 = $mw->Radiobutton(-text => 'Rb1', -value => '1', -variable => \$rb); my $rb_frame = $t->Frame(); my $rb2 = $rb_frame->Radiobutton(-text => 'N', -value => 'N', -variable => \$rb)->grid (-row => 0, -column => 0); my $rb3 = $rb_frame->Radiobutton(-text => 'P', -value => 'P', -variable => \$rb)->grid (-row => 0, -column => 1); # two radio button in cell - works $t->windowConfigure("4,3", -window => $rb_frame); #=================================== # hideous Color definitions here: #$t->tagConfigure('active', -bg => 'white', -relief => 'sunken'); #$t->tagConfigure('OddCol', -bg => 'lightyellow', -fg => 'black'); #$t->tagConfigure('title', -bg => 'lightblue', -fg => 'black', -relief + => 'sunken'); #$t->tagConfigure('dis', -state => 'disabled', -bg => 'black'); $t->pack(-expand => 1, -fill => 'both'); #$t->focus; Tk::MainLoop; sub update_table { print "[update_table] 1\n"; $t->tagCell('dis', '1,1' ); $t->tagRaise('dis', 'OddCol'); # only needed if coltagcommand used $t->activate('2,2'); $t->tagRow('active',3); # $t->configure(-padx =>( $t->cget(-padx))); # a trick needed sometimes to update } sub brscmd { my ($previous_index, $actual_index) = @_; my ($cell_str, $cell_value); my ($row, $col) = split ',', $actual_index; $cell_str = "$row,$col"; $last_browse_row = $row; $last_browse_col = $col; print "[brscmd] row $row col $col cell value <$arrayVar->{$cell_str}>\ +n"; if ($col == 2) { print "[brscmd] for coll <$col>\n"; $menuTest->destroy if Tk::Exists($menuTest); $menuTest = $mw->Optionmenu( -variable => \$sel_item, -options => [@colour_list], -command => \&menu_used); $t->windowConfigure("$row,$col", -window => $menuTest); $sel_item = @colour_list[0]; $t->update(); } } sub dis_table{ print "2\n"; foreach my $col (1..4){ if ($arrayVar->{"6,$col"} >= 1) { print "col->$col\n"; $t->tagCell('dis',"7,$col"); $t->tagCell('dis',"8,$col"); $t->tagCell('dis',"9,$col"); } } $t->tagRaise('dis', 'OddCol'); # only needed if coltagcommand used } sub table_button () { print "\n[table_button] pressed\n"; } sub menu_used() { my ($answer); print "\n[menu_used] selection in <$sel_item>\n"; # show the dialog box if choice is custom if($sel_item eq 'custom') { $answer = $dbox->Show(); if($answer eq 'Ok') { $sel_item = $custom_colour; } else { $sel_item = 'none'; } } print "\n[menu_used] row <$last_browse_row> col <$last_browse_col> set +ting value <$sel_item>\n"; $arrayVar->{"$last_browse_row,$last_browse_col"} = $sel_item; $menuTest->destroy if Tk::Exists($menuTest); $t->activate("0,0"); &TMRefresh($t); } ######################################### sub TMRefresh { #Required input TableMatrix object. #use to force matrix to update, a code trick return if (!$_[0]); $_[0]->configure(-padx =>($_[0]->cget(-padx))); #$realmatrix->update; #$t->update; #$top->update; #$t->see("100,100"); #trick to force update? #$t->see("end"); #$t->see("1,1"); } sub menu_used2() { my ($answer); print "\n[menu_used2] selection in <$sel2_item>\n"; # show the dialog box if choice is custom if($sel2_item eq 'custom') { $answer = $dbox2->Show(); if($answer eq 'Ok') { $sel2_item = $custom_colour; } else { $sel2_item = 'none'; } } }

In reply to Tk TableMatrix - Hiding & Recalling Widgets (eg OptionMenu) in a TableMatrix cell by merrymonk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.