Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

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;


Comment on Re: Perl Tk compound formatting
Download Code
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?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1037498]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (8)
As of 2015-07-04 11:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (59 votes), past polls