Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Perl Gtk3 Tutorial

by Anonymous Monk
on Sep 10, 2012 at 21:16 UTC ( [id://992851]=note: print w/replies, xml ) Need Help??


in reply to Perl Gtk3 Tutorial

I have previous Gtk2.pm experience, and skimmed through your tutorial. It actually looks exactly like Gtk2 except perhaps for a few new widgets.

The code examples have perhaps a bit too much boilerplate; I'd remove use diagnostics and use feature ':5.14' when not needed (you appear to be using only say anyway so use 5.010; should work as well.) Maybe even remove the ~6 lines you use for window creation from the later examples in the document (of course, they should stay intact in the .pl files).

I'd perhaps visualise how packing with containers works a bit more thoroughly early on. (Such as drawing the containers' outlines and variable names over the UI.) It's one of the most important points to understand about Gtk. (I notice you've got a pack-style visualisation later on in the document; that one's at a good spot.)

I have a little bit of an issue with how you use the same callback to do three different things depending on $userdata in examples 5 and 6a, but I'll let that slide since it's not a bad way to demonstrate the use of that variable.

You are missing one important example about $userdata: How to pass multiple values. (either pass an arrayref or use a closure/anon sub to wrap around it)

The progress bar example seems to be missing how to stop it. (returning FALSE from the idle callback, or deleting the callback) (not to mention that proper utilisation of a progress bar is quite a bit more difficult. perhaps a note somewhere that your callbacks shouldn't take much time or the UI will freeze?)

There's one more thing I'd like to see, but it may not be for the level of Perl user you aim your tutorial for. You keep all the UI variables as global. Let's take example 6d. Instead of sub update accessing the global variable $label to do its thing. It would be nicer if you passed $label as an argument to your function. This allows you to compartmentalise your UI code and let variables you don't use fall out of scope. (I generally set up the whole UI in a single sub.)

Replies are listed 'Best First'.
Re^2: Perl Gtk3 Tutorial
by kevinp (Novice) on Sep 14, 2012 at 11:01 UTC

    Thanks, some helpful comments and I will inlcude them.

    Gtk3 is very like gtk2, but my experience is that you can rarely just change gtk2 to gtk3 and expect it to work. Small changes that are minor issues for veteran coders become complete major roadblocks for beginners.

    The tutorial was really aimed at beginners, particularly my 15 year old son and his friends. I included "use diagnostics" to give new users some more feedback, although I often find it more verbose than helpful myself.

    I am debating about whether to include complete programs in tutorial. On the downside it makes it repetitive and excessively long; on the plus side everything is in one place. I think at this stage I will continue getting the examples written and base text down and ponder the formatting a little longer.

    I will include an example of passing an array ref back as $userdata and include examples avoiding using globals when not necessary.

      I am debating about whether to include complete programs in tutorial.

      At the very least include them at the end, made from the exact code from tutorial, and make sure they run, and provide Devel::VersionDump output in a  =head1 PREREQUISITES section as an example of a configuration know to work

      Its frustrating to try tutorials, and when you piece the code together, then find the author omitted something crucial or made a typo -- esp for beginners

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (6)
As of 2024-04-26 09:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found