Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: Perl Tk compound formatting

by thundergnat (Deacon)
on Jun 06, 2013 at 18:13 UTC ( #1037498=note: print w/replies, xml ) Need Help??

in reply to Perl Tk compound formatting

Something like this perhaps? (using built in bitmaps in lieu of png images)

use strict; use warnings; use Tk; my %w; $w{mw} = MainWindow->new; for (qw/ this that a_longer_name X /){ my $bttn = $w{mw}->Button( -text => "$_ ", -font => 'times 19', -justify => 'right', -compound => 'right', -bitmap => 'warning', #-image => $w{mw}->Photo( -file => 'whatever' ), -anchor => 'e', -padx => 4, )->pack; push @{$w{buttons}}, $bttn; } $w{mw}->update; { my $width = 0; for (@{$w{buttons}}) { $width = $_->width if $_->width > $width; } for (@{$w{buttons}}) { $_->configure( -width => $width ); } } MainLoop;

Replies are listed 'Best First'.
Re^2: Perl Tk compound formatting
by CColin (Scribe) on Jun 06, 2013 at 23:09 UTC
    Question: Sorry to bother you again, but how to add a scrollbar to this since the number of buttons may disappear off the page. I see that you have aded a mainwindow and a child window (somehow). I have tried the following code to create a scrollbar, but it only appears in the main window where there are no buttons displayed, rather than the child window:
    my $scrollbar = $mw->Scrollbar( ); my $lb = $mw->Listbox(-yscrollcommand => ['set' => $scrollbar]); #Configure the Scrollbar to talk to the Listbox widget $scrollbar->configure(-command => ['yview' => $lb]); #Pack the Scrollbar first so that it doesn't disappear when we resize $scrollbar->pack(-side => 'right', -fill => 'y'); $lb->pack(-side => 'left', -fill => 'both');

    How to get this scrollbar to appear alongside the buttons that are listed in the child window?

      scrollbars are kind of PITA to setup, which is why there is  $parent->Scrolled( 'widgetname', ... widgetoptions ... )->pack see Tk::Scrolled

      You don't want to (can't actually) scroll the main window directly. You need to insert a scrolled Frame or Pane into the toplevel (main window) then pack your widgets inside that.

      use strict; use warnings; use Tk; use Tk::Pane; my %w; $w{mw} = MainWindow->new; $w{mw}->geometry('220x350'); $w{bframe} = $w{mw}->Scrolled( 'Frame', -scrollbars => 'oe' )->pack( -expand => 1, -fill => 'both' ); for (qw/ this that a_longer_name X cheese verb witty_retort superstiti +on A..Z whatever/){ my $bttn = $w{bframe}->Button( -text => "$_", -font => 'times 19', -justify => 'left', -compound => 'right', -bitmap => ('error','info','question','warning')[rand 4], -anchor => 'e', -padx => 4, )->pack; push @{$w{buttons}}, $bttn; } $w{mw}->update; { my $width = 0; for (@{$w{buttons}}) { $width = $_->width if $_->width > $width; } for (@{$w{buttons}}) { $_->configure(-width => $width); } } MainLoop;
        Great, works well again. The geometry introduced has squashed the buttons but that reconfigures easily. Thanks.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1037498]
[davido]: Lol, in composing test code for Re: Stupid, yet simple, sort question I managed to fill up /tmp for a moment, causing bash to complain about "pmbash: cannot create temp file for here-document: No space left on device"
[davido]: hm, sorry, wrong link: Re^3: Perl Program to efficiently process 500000 small files in a Directory (AIX) should be it.

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (2)
As of 2018-03-18 06:59 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (228 votes). Check out past polls.