http://qs321.pair.com?node_id=1215102


in reply to Re: Using Tk 8 menubar in its own window
in thread Using Tk 8 menubar in its own window

Thanks for the quick reply. If by spacer you mean Frame, then your suggestion is reassuring in that I can use it with a simple test program:

use warnings; use strict; use Tk 800.000; my $mw = MainWindow->new; my $menu = $mw->Menu(); my $file_menu = $menu->cascade(-label => 'File', -tearoff => 'false'); my $edit_menu = $menu->cascade(-label => 'Edit', -tearoff => 'false'); my $help_menu = $menu->cascade(-label => 'Help', -tearoff => 'false'); $mw->configure(-menu => $menu); my $spacer = $mw->Frame(-width => 200)->pack; # resize handle obscures Help menu $mw->resizable(0,0); MainLoop;

I'm now inclined to think I didn't get this to work earlier because there's something else in the program that prevents a packed spacer from working as expected. I know the menu's window is being resized programmatically (so that it is stretched horizontally across the screen); I will have to keep digging to figure this out. I am not the program's original author, and am still figuring out my way around both it and Perl and Tk.

Replies are listed 'Best First'.
Re^3: Using Tk 8 menubar in its own window
by chrstphrchvz (Scribe) on May 24, 2018 at 05:39 UTC

    It turns out the height of the menubar window was manually being set to 30 using $toplevel->geometry. Having it use height 0 instead eliminates the empty space. I then have to tell the program separately to pretend the menubar window has a height of 30 so that the positions calculated for the other windows do not overlap with the menubar window. Since I'm using geometry anyways, I can omit the spacer widget. Here's what that looks like for the test program:

    use warnings; use strict; use Tk 800.000; my $mw = MainWindow->new; my $menu = $mw->Menu(); my $file_menu = $menu->cascade(-label => 'File', -tearoff => 'false'); my $edit_menu = $menu->cascade(-label => 'Edit', -tearoff => 'false'); my $help_menu = $menu->cascade(-label => 'Help', -tearoff => 'false'); $mw->configure(-menu => $menu); # same effect as geometry('200x0+0+0') #my $spacer = $mw->Frame(-width => 200)->pack; $mw->geometry('200x0+0+0'); # resize handle obscures Help menu $mw->resizable(0,0); MainLoop;