in reply to Perl Tk : How to adjust labels width in textarea with every screen resolution.

Hi Monks,

Below is the sample code which depicts what I am trying to achieve,

on my desktop with resolution (1920*1080), all labels are fitting well in the line, but when I try it on laptop with different resolution, labels could go on the next line due to width changes or they will be having less width than it should be.

#!D:\Strawberry\perl\bin\perl.exe use strict; use Tk; use Tk::ROText; my($cnt, $w0,$w1,$w2,$w3,$w4,$w5); # Main Window my $mw = new MainWindow(-background =>'#990033'); ###FOCUS ON MAIN WINDOW $mw->focus(); my $sw = $mw->screenwidth; #1920 my $sh = $mw->screenheight; #1080 my @enter_values = (1,'NAME','AGE','PROFESSION','CONTACT','ADDRESS'); ###################################################################### ##Text Area my $textarea_width = $sw*0.108; print "\$sw : $sw\n\$textarea_width : $textarea_width\n"; my $textarea = $mw->Frame(); my $txt = $textarea->ROText(-width=>$textarea_width,-height=>22,-font= +>"{sans serif} 10", -background => 'lightgray'); my $srl_y = $textarea->Scrollbar(-orient=>'v',-command=>[yview=>$txt]) +; my $srl_x = $textarea->Scrollbar(-orient=>'h',-command=>[xview=>$txt]) +; $txt-> configure(-yscrollcommand=>['set', $srl_y], -xscrollcommand=>['set',$srl_x]); &Enter_labels_in_textarea; ###Text Area $textarea->grid; $txt->grid(-row=>9,-column=>1); $srl_y->grid(-row=>9,-column=>2,-sticky=>"ns"); $srl_x->grid(-row=>10,-column=>1,-sticky=>"ew"); MainLoop; sub Enter_labels_in_textarea { $cnt = 0; foreach my $val(@enter_values){ ##print "\$val => $val\n\n"; if($cnt == 0){ $w0 = $txt->Label(-text =>"$val",-foreground =>'white',-background =>' +navyblue',-font=>10, -width=>($textarea_width*0.025), -height=>1, -cu +rsor => 'leftbutton', -relief =>'raised',-justify=>'left'); print "\$w0 : $w0\n"; $txt->windowCreate('end', -window => $w0); } elsif($cnt == 1){ $w1 = $txt->Label(-text =>"$val",-foreground =>'white',-background =>' +#990033',-font=>10, -width=>($textarea_width*0.16), -height=>1, -curs +or => 'leftbutton', -relief =>'raised',-justify=>'left'); $txt->windowCreate('end', -window => $w1); } elsif($cnt == 2){ $w2 = $txt->Label(-text =>"$val",-foreground =>'white',-background =>' +#990033',-font=>10, -width=>($textarea_width*0.10), -height=>1,-relie +f =>'raised',-justify=>'left'); $txt->windowCreate('end', -window => $w2); } elsif($cnt == 3){ $w3 = $txt->Label(-text =>"$val",-foreground =>'white',-background =>' +#990033',-font=>10, -width=>($textarea_width*0.10), -height=>1,-relie +f =>'raised',-justify=>'left'); $txt->windowCreate('end', -window => $w3); } elsif($cnt == 4){ $w4 = $txt->Label(-text =>"$val",-foreground =>'white',-background +=>'#FF0000',-font=>10, -width=>($textarea_width*0.10), -height=>1,-re +lief =>'raised',-cursor => 'leftbutton',-justify=>'left'); $txt->windowCreate('end', -window => $w4); } else { $w5 = $txt->Label(-text =>"$val",-foreground =>'white',-background =>' +darkgreen',-font=>10, -width=>($textarea_width*0.14), -height=>1,-rel +ief =>'raised',-cursor => 'leftbutton',-justify=>'left'); $txt->windowCreate('end', -window => $w5); } $cnt++; } }

Thank you

  • Comment on Re: Perl Tk : How to adjust labels width in textarea with every screen resolution.
  • Download Code

Replies are listed 'Best First'.
Re^2: Perl Tk : How to adjust labels width in textarea with every screen resolution.
by Anonymous Monk on Dec 04, 2019 at 04:01 UTC

    Below is the sample code which depicts what I am trying to achieve,

    Hi

    perlintro, Modern Perl , the future is now :)

    #!/usr/bin/perl -- #!D:\Strawberry\perl\bin\perl.exe ## ## ## perltidy -olq -csc -csci=10 -cscl="sub : BEGIN END if while for " +-otr -opr -ce -nibc -i=4 -pt=0 "-nsak=*" #!/usr/bin/perl -- use strict; use warnings; use diagnostics; use Tk; use Tk::ROText; my $mw = tkinit( -background => '#990033' ); my $sw = $mw->screenwidth; #1920 my $sh = $mw->screenheight; #1080 my $frame_width = $sw * 0.108; print "\$sw : $sw\n\$frame_width : $frame_width\n"; my $frame = $mw->Frame(); #~ my $txt = $frame->ROText( my $txt = $frame->Scrolled( 'ROText', -width => $frame_width, -height => 22, -font => "{sans serif} 10", -background => 'lightgray' ); Enter_labels_in_textarea( $txt->Subwidget('scrolled'), enter_values( $frame_width ) ); $txt->insert('end', "\n\n\n\n".rand."\n" ); $frame->pack(qw/ -expand 1 -fill both /); $txt->pack(qw/ -expand 1 -fill both /); #~ $txt->grid( -row => 9, -column => 1 ); #~ $txt-> $mw->WidgetDump; MainLoop(); exit( 0 ); sub Enter_labels_in_textarea { my( $rotext, $enter_values ) = @_; foreach my $val (@$enter_values) { my( $text, @options ) = @$val; my $label = $txt->Label( -foreground => 'white', -font => 10, -height => 1, -cursor => 'leftbutton', -relief => 'raised', -justify => 'left', -text => $text, @options, ); $rotext->windowCreate( 'end', -window => $label , ); print "$label $text @options\n"; } } sub enter_values { my( $frame_width ) = @_; return [ [ 1, -background => 'navyblue', -width => ( $frame_width * ((2+length '1') /100) ) ], [ 'NAME', -background => '#990033', -width => ( $frame_width * 0.16 ), ], [ 'AGE', -background => '#990033', -width => ( $frame_width * ((2+length 'AGE') /100) ), ], [ 'PROFESSION', -background => '#990033', -width => ( $frame_width * ((2+length 'PROFESSION')/100) ), ], [ 'CONTACT', -background => '#FF0000', -width => ( $frame_width * 0.16 ), ], [ 'ADDRESS', -background => 'darkgreen', -width => ( $frame_width * 0.24 ), ], ]; }

      Hi, Thank you for this code, let me check and revert.

      But I am wondering what makes this code to get all the 5 lables on separate line of textarea on each and every resolutions on different machines.

      Regards

        The butterflies?

      Hi, This doesn't seem working for me (for recommended screen resolution 1920*1080), "ADDRESSS" seems going on next line as width of the ADDRESS is more than it should be.

      Thanks

        Hi, This doesn't seem working for me (for recommended screen resolution 1920*1080), "ADDRESSS" seems going on next line as width of the ADDRESS is more than it should be.

        Me neither.

        I've read it three times now.

        Its not working for me.

        Maybe you can try something besides saying it doesn't work for you.

        Look at the numbers or something.

        Make a connection between the characters and pixels.