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


in reply to Re^2: How to get foreground color from a TK::Listbox
in thread How to get foreground color from a TK::Listbox

Hi, the Listbox is a very useful widget, but has it's limitations. I would suggest making your own widget on a Tk::Canvas. The Canvas allows you to do almost anything you want. I made a little Canvas based demo widget module to show how easy it is.... see Tk-CanvasDirTree. It shows how to easily import a list and display it anyways you want. If you want full control over colors and fonts and bindings, the Tk::Canvas is the way to go. The only real trick is measuring your font size in pixels, which is easy to do. Make your own wheel! :-)
  • Comment on Re^3: How to get foreground color from a TK::Listbox

Replies are listed 'Best First'.
Re^4: How to get foreground color from a TK::Listbox
by jsteng (Beadle) on Apr 15, 2018 at 14:39 UTC
    OK! Seems like a good place to finally solve my project.
    Will work on a canvas solution and see how that goes from there on. Thanks.
      Hi, one point I forgot to mention. It may or may not help. In Tk, is is sometimes useful to pre-define all the special fonts before you use them in widgets. Create the fonts first, then refer to them by a name, like 'big', or 'bold'.
      #!/usr/bin/perl use warnings; use strict; use Tk; my $mw = new MainWindow; $mw->fontCreate('big', -family=>'arial', -weight=>'bold', -size=> 28 ); my $c = $mw->Canvas(-bg=>'white')->pack; #---determine font spacing by making a capital W--- my $fonttest = $c->createText(100,100, -fill => 'black', -text => 'W', -font => 'big' ); my ($bx,$by,$bx1,$by1) = $c->bbox($fonttest); $c->{'f_width'} = $bx1 - $bx; $c->{'f_height'} = $by1 - $by; print 'width ',$c->{'f_width'},' ',$c->{'f_height'},"\n"; MainLoop;

      I'm not really a human, but I play one on earth. ..... an animated JAPH