Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^3: Verbose Tk Code

by Discipulus (Canon)
on Feb 28, 2021 at 19:31 UTC ( [id://11128915]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Verbose Tk Code
in thread Verbose Tk Code

Hello LanX,

I'm obviously not an expert, but waiting for zentara to awake from his oak you can have my humble opinion.

Corion is right: if you have a case where repetition is needed providing some %default is better tan nothing and suffices.

The real problem is that writing a GUI is verbose. My best Tk program is tartaglia's triangle experiment. The interface is clear for my taste but as you can see there are ~70 lines of pure verbose Tk code. Ok I have a lot of -side => 'left',-expand => 1,-padx=>5 but it adds nothing to me if I have some shortcut for this, not even in the Corion's simple way.

Why? Because I generally cut and paste my own code.

Then you can have very sligth differences: nowadays I'm playing with yet another Tk and GD application: look at its init_control_window sub: I'm packing bigger frames with the border and then inside them I put othere smaller frames expanding horizontally, but first and last subframes also need -pady => 5 to look nicer. In the same way if you want something to be packed at -side => 'right' and you want it to not be too much to the border, then the first element (right aligned elements must be packed in reverse order) need a different -padx value. And so on.

So in my humble opinion Tk is already complicated this way and some shortcut as in your example can make it even less redable.

L*

There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

Replies are listed 'Best First'.
Re^4: Verbose Tk Code
by LanX (Saint) on Feb 28, 2021 at 20:07 UTC
    Hi Discipulus

    thanks for the code links.

    > if you have a case where repetition is needed providing some %default is better tan nothing and suffices.

    The example in the OP had only one method, the point of with is to handle many different methods on the same object.

    with is available in many languages, tho Tk might be the wrong field for applying it.

    The other default options were optional, but it surprised me a lot that Tk needed it. Must be related to the TCL brige.

    > Why? Because I generally cut and paste my own code.

    Well, personally I prefer DRY over boilerplating, but YMMV.

    I looked into your code, and I see plenty of possibilities to improve readability.

    may I suggest:

    { my $Entry = sub { my ($self,$textvar) = @_; return $self ->Entry(-width => 3,-borderwidth => 4, -textvariable => $t +extvar) ->pack(-side => 'left', -expand => 1,-padx=>5); }; # ... $fr2a->$Entry(\$size_help); }

    instead of many instances of

    $fr2a->Entry(-width => 3,-borderwidth => 4, -textvariable => \$size_he +lp)->pack(-side => 'left', -expand => 1,-padx=>5);

    same for other methods.

    Please note that you can

    • restrict the scope of these anonymous methods to blocks, they are just lexical variables
    • give them self-documenting names
    • make later adjustments at a central point.
    • still add verbose C&P code in the middle

    > Corion is right:

    TIMTOWTDI ... but YMMV :)

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

    update

    improved code for method-wrapper.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2024-04-19 20:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found