in reply to Re: Placement of image with Tk::Compound and Tk::Menu
in thread Placement of image with Tk::Compound and Tk::Menu

Do you know Tk::Compound?

It makes it possible to combine text and image and is a way to create menuitmes with both images and text in perl/Tk.

Problem is how can I place image to far left in menu (left justify it, that is)?

  • Comment on Re^2: Placement of image with Tk::Compound and Tk::Menu

Replies are listed 'Best First'.
Re^3: Placement of image with Tk::Compound and Tk::Menu
by jdtoronto (Prior) on Jul 05, 2006 at 03:46 UTC
    Yes, the answer is GEOMETRY MANAGER.
    #!/usr/bin/perl -w use strict; use Tk; use Tk::Compound; my $parent = MainWindow->new(); my $b = $parent->Button; my $c = $b->Compound; $b->configure(-image => $c); $c->Line; $c->Bitmap(-bitmap => 'warning'); $c->Space(-width => 8); $c->Text(-text => "Warning", -underline => 0); $b->pack(-side => 'left'); MainLoop();
    This is the example code from Tk::Compound's documentation with a couple of things added to make it runnable. Note the addition of  -side => 'left' as an option to the pack command. Tk::pack is not my genoetry manager of choice, but it is simple for this demonstration. I would suggest developing amore than nodding acquaintance with "Mastering Perl/Tk" by Lidie and Walsh, published by O'Reilly.

    jdtoronto

      Menubar doesn't need packing (did you even run my example code?)
      Maybe you didn't have Tk:ToolBar installed - but check updated example code above which uses a builtin bitmap instead.

      You use Tk::Compound widget on a Button widget but I'm using it on a command menuitem on a menubar.

        Yes, but after I had responded. I see your issue, looking carefully at my menues I note the constant space to the left of the option text, or in your case the graphic. This space is used for the check mark when you use a checkbutton in the menu. There is also some small space to the right which does not seem controllable either. I did somemore experimenting with some of my own code, but in the end I did not find a way to do what you need. Here is your code but with a Checkbutton added so when you check it you can see some justification for the space.
        #!/usr/bin/perl use Tk; use Tk::ToolBar; use Tk::Compound; #my $mw = tkinit; my $mw = MainWindow->new(); #Load images from Tk::ToolBar. my $tb = $mw->ToolBar(); $tb->destroy(); my $compound = $mw->Compound; #How do we place this image to far left in menu? $compound->Image( -image => 'acthelp16', -anchor => 'w' ); $compound->Space( -width => 8 ); $compound->Text( -text => "Open", -underline => 0 ); my $menubar = $mw->Menu( -type => 'menubar', ); #my $menuitem = [ [ command => Open, -image => $compound ] ]; $menubar->cascade( -label => 'File', -tearoff => 0, -menuitems => [ [ Button => 'Open', -image => $compound ], [ Button => '~Quit', -command => [ destroy => $mw ] +], [ Checkbutton => 'Checkthing' ], ] ); $mw->configure( -menu => $menubar ); MainLoop;
        jdtoronto