monksp has asked for the wisdom of the Perl Monks concerning the following question:

Hello, all,

I have a Tk megawidget that looks like this:
package ChecklistFrame; use strict; use Tk::widgets qw/Button Label/; use base qw/Tk::Frame/; Construct Tk::Widget 'ChecklistFrame'; sub ClassInit { my($class, $mw) = @_; $class->SUPER::ClassInit($mw); } sub Populate { my($self, $args) = @_; $self->SUPER::Populate($args); my($type) = $args->{'-type'}; delete $args->{'-type'}; if (($type eq 'item') || ($type eq 'header')) { $self->Component( 'Button' => 'runbutton', -pady => 0, -text => 'Run' )->pack(-side => 'left'); $self->Component( 'Button' => 'nabutton', -pady => 0, -text => 'N/A' )->pack(-side => 'left'); $self->Component( 'Label' => 'label', -justify => 'left' )->pack(-side => 'left', -anchor => 'w'); } elsif ($type eq 'label') { $self->Component( 'Label' => 'label', -relief => 'raised' )->pack(-side => 'left', -fill => 'both', -expand => 1); } my($l) = $self->Subwidget('label'); $self->ConfigSpecs( -text => [$l], -class => [$self], 'DEFAULT' => [$self] ); $self->Delegates( 'DEFAULT' => $self ); } 1;


My problem is that the label is always centered. If I have a simple little example program that looks like this:
my($mw) = MainWindow->new(); $currentframe = $mw->ChecklistFrame( -class => 'Checklist', -type => 'item', -text => 'Foo' ); $elementtext = 'Foo!'; $currentframe->pack(); MainLoop;
Everything looks as it should, but the text is centered in its section of the widget, rather than up against the edge of the nabutton.

Any suggestions?

Replies are listed 'Best First'.
Re: Justifying a label inside a Tk megawidget
by hangon (Deacon) on Jul 15, 2009 at 04:29 UTC

    Use the -anchor option for the label widget. The -justify option determines how multiline text is aligned.

    $self->Component( 'Label' => 'label', -anchor => 'w', # -justify => 'left' )->pack(-side => 'left', -anchor => 'w');
      Awesome, thanks. I didn't realize that widgets themselves could have an anchor tag.