You obviously didn't understand my first point. You need to use more frames. Frames are like invisible boundaries which are packed just like any other object. You have 3 menu choices. I would make 3 frames, one for each choice. Each choice has 3 objects, a label, entry window, button. To display a frame, pack it into Mainwindow or perhaps another frame. To remove a frame from view, unpack it. I don't have time to write the code right now, but that should work. At any time, you will have zero or one of the 3 "choice frames" packed and view-able.

To clear the entry window, set the -textvariable variable to a null string.

Try the above and see what happens.

Update: I used the wrong terminology, instead of "unpack()", use "packForget()". My idea was correct, but name was wrong. Use "packForget" to remove an object from being displayed. I did a quick hack to my previously posted code, only for the "reset password" menu. See Below.

Click on Menu->password reset option, gives display of the reset objects, enter a user, hit ok on the confirmation pop-up, that will print to stdout and also clear the 3 reset objects in the window. Going through Menu->password reset option again will repeat this behavior. Note the reset to the $user variable.

Homework for the OP: Make more Frames. Probably a MenuFrame and at perhaps even a "work frame" packed into the MainWindow. You can make a frame for each of the menu options. Then pack() or packForget() those frames into either the "work frame" or the Mainwindow to show or not show them. In my hack I just directly packForget() each of the individual widgets, don't do that. Use a frame to group them together. My code is just "proof of concept", not finished code. There are hide and un-hide options for entire windows.

#!/usr/local/bin/perl use strict; use warnings; use Tk; my $mainwindow = MainWindow->new(); $mainwindow->geometry("600x150"); $mainwindow->title("Add/Delete/Reset Password"); # Disable the window Resize # $mainwindow->resizable(0,0); # Why??? don't need it? my $main_menu = $mainwindow->Menu(); $mainwindow->configure(-menu => $main_menu); # File my $menu_menu = $main_menu->cascade(-label=>"Menu", -underline => 0, - +tearoff=>0); $menu_menu->command(-label=>"Password Reset for users", -underline= +>0, -command=>\&Show_ResetPassword_menu); $menu_menu->command(-label=>"Add User", -underline=>0, -command=>\& +Show_AddUser_menu); $menu_menu->command(-label=>"Delete User", -underline=>0, -command= +>\&Show_DeleteUser_menu); # About $main_menu->command(-label=>"About", -command=>sub{$mainwindow->messageBox(-title=> "Ab +out", -message=>"Version 3.0.0", -type => "ok")}); my $label_resetp; my $entry_resetp; my $button_resetp; MainLoop(); my $user; #text vasriable sub password_reset { my $answer = $mainwindow -> messageBox( -message=>"Password Reset for user: $user", -title=> "Password", -type=>"YesNoCancel", -icon=>"info"); if ($answer =~ /yes/i) { # code to reset password goes here.... # whatever log messasges you want print "PASSWORD RESET SUCEEDED: $user\n"; # a log entry? } else { print "PASSWORD RESET ABORTED: $user\n"; # a log entry? } $user=''; # clear the user name entry field $label_resetp->packForget(); $entry_resetp->packForget(); $button_resetp->packForget(); } sub Show_ResetPassword_menu { $label_resetp = $mainwindow->Label(-text=>"Password Reset for user + ", -width => 40) -> pack ( -side=>'left'); $entry_resetp = $mainwindow->Entry(-width => 30, -textvariable =>\ +$user )->pack(-side => 'left'); $entry_resetp->bind("<Return>", \&password_reset); $button_resetp = $mainwindow->Button(-text=>"Click to reset", -com +mand => \&password_reset , -width => 15) -> pack ( -side=>'bottom' ); } sub add_user { my $answer = $mainwindow -> messageBox( -message=>"Add user: $user", -title=> "Password", -type=>"ok", -icon=>"info"); } sub Show_AddUser_menu { my $label_adduser = $mainwindow->Label(-text=>"Add user ", -width +=> 40) -> pack ( -side=>'left'); my $entry_adduser = $mainwindow->Entry(-width => 30)->pack(-side = +> 'left'); # $entry_adduser->bind("<Return>", \$adduser_handle_return); my $button = $mainwindow->Button(-text=>"Click to reset", -command + => \&adduser, -width => 15) -> pack ( -side=>'bottom' ); } sub Show_DeleteUser_menu { my $deleteuser_handle_return; my $label_deleteuser = $mainwindow->Label(-text=>"Delete User ", -widt +h => 40) -> pack ( -side=>'left'); my $entry_deleteuser = $mainwindow->Entry(-width => 30)->pack(-side => + 'left'); $entry_deleteuser ->bind("<Return>", \$deleteuser_handle_return); my $button = $mainwindow->Button(-text=>"Click to reset", -command => +\$deleteuser_handle_return, -width => 15) -> pack ( -side=>'bottom' ) +; $deleteuser_handle_return = sub { $mainwindow -> messageBox( -message=>"Delete User", -title=> "DELETE", -type=>"ok", -icon=>"info"); } }

In reply to Re^3: tk widget - How to hide and unhide the forms in my script by Marshall
in thread Resolved: tk widget - How to hide and unhide the forms in my script by fsmendoza

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.