FE 'tkGooies' subsystem


FE = effie =
Freedom Environment

Javascript is disabled. Please enable Javascript
in order to see image changes on 'mouse-overs'.

FE Home page > The FE Downloads page >

This 'tkGooies' Download page

! Note !
Some sections here may be touched up or revised occasionally
--- especially when there are new releases.
Also, some new screenshots or a video of an install may be added.

< Go to the 'tkGooies' DOWNLOAD Link and Instructions, below. >
( Skip the following 'Introduction'. )

(On the need for 'end-user' utilities that
demonstrate that Tcl-Tk can be used to make
productive utilities ... thousands of them.)

In a discussion, on wiki.tcl.tk, about what needs to be done to 'market' Tcl-Tk as a 'not-dead-yet---not-by-a-long-shot' programming language, 'Suqsuruq' wrote (in 2011 Jan):

    "Personally I think Tcl needs more end-user software to be written. Write GOOD Tcl/Tk SOFTWARE, which end-users like now, and tomorrow there will be thousands of new users and programmers. Tcl is great language but there is no END-USER software you can use."

Apparently he is pretty passionate about that. (The capital letters are his, not mine.) And I agree with him ... wholeheartedly. So ...

What this is :   (a bundle of 'end-user' apps)

This is a download page for a collection of Tk scripts bundled together under the name 'tkGooies'.

These scripts are meant to provide 'end-user' utilities:

  • plot utilities
  • drawing/painting/diagramming utilities
  • image creation and editing utilities
  • 3D model viewing/translating/creation utilities
  • map-making utilities
  • educational demos (esp. math, physics)
  • games
  • and much more

which demonstrate the potential of Tcl-Tk to provide literally thousands of 'apps' to 'end-users'.

This 'tkGooies' bundle is provided as a sub-system among the FE (Freedom Environment) family of utility sub-systems.

The 'tkGooies' subsystem is coded completely with Tcl-Tk scripts and, in some cases, auxiliary Linux shell scripts.

Hence all the source is freely available in 'human-readable' form, because the source is necessary to execute the programs --- the 'scripts' --- which I may sometimes refer to as 'apps'.

These Tk scripts are (and will be) developed on Linux, but most should be portable to a Mac OS or MS Windows OS with few changes.

So this is really a 'tkGooies-for-Linux/Unix' page. But anyone is welcome to take this package and make a

  • 'tkGooies-for-Apple-OS-whatever' --- or
  • 'tkGooies-for-Microsoft-OS-whatever' --- or
  • 'tkGooies-for-Google-OS-whatever'   (Android?)

--- PROVIDED THAT any changes and enhancements that they (the 'copiers') make to the scripts are to be made available to others, upon request --- for the 'requesters' to use as individual scripts or as a package --- and so that 'the requesters' can make their own versions of these packages.

    (By 'changes and enhancements ... made available' that means that complete working copies of the 'copiers' script code is to be made available. Not just 'snippets'.)

I do all my programming on Linux. Accordingly, I have noted on the 'Contact' page of this freedomenv.com site:

    "Please note that I have no plans to port (and test) any of the FE subsystems to another OS, like a Mac or Microsoft OS. And I have no plans to internationalize the text in these subsystems. I leave that to others."

    There are too many items on my Tcl-Tk and shell-script programming 'bucket-list', and not enough years left, for me to take on such tasks.

Detailed Description of 'tkGooies' :
(with code samples)

For more detailed description of the intent and architecture of the 'tkGooies' system, see the 'tkGooies' Description and Code Samples page. (See some 'tkGooie' images below.)

Method of Packaging :
(a self-extracting install script)

I package each of my FE subsystems as a self-extracting install script. I did the same for this 'tkGooies(for Linux)' package.

The install script makes it easy to install the FE system on a local storage drive of your computer.

Typically, you would download the self-extracting install script into a 'DOWNLOADS' directory on your computer.

Then double-click on the install script to extract the 'tkGooies' directory structure and scripts and other files into a sub-directory of your home directory. (Details are below.)

As an alternative to a direct download to a storage device attached to your computer, you can put the install file on a USB 'stick' and plug the USB stick into a computer (on which you have a home directory).

Double-click on the install script, on the USB stick, to extract the install files into your home directory --- where-ever that may be when you do the double-clicking.

Thus you can carry 'tkGooies' around on a USB stick, and install the 'tkGooies' system on any of your computers --- desktop, laptop, or whatever.

Some screenshots :
(a picture is worth > 1K words)

Some examples of the kinds of GUI's that are in the 'tkGooies' package can be seen in the following screenshot images. (Some of these images may be slightly out of date.)

More sketching, drawing, painting,
diagramming, morphing, pixel-editing
utilities are to be forthcoming.

RGB-color-selector utility

Font-selector utility

A 'toolchest-apps-menu' done with a Tk 'button' widget
for each 'drawer', with a small decorative image
placed on the left of each button.

A 'toolchest-apps-menu' done with a Tk 'canvas' widget
for each 'drawer', with a color-gradient background
drawn on each 'drawer' = 'canvas'.

A 'toolchest-apps-menu' done with a Tk 'canvas' widget
for each 'drawer', with a background-image placed
on each 'drawer' = 'canvas'.

Another toolchest like the one above (drawers with
background images on canvases) --- indicating that
a different image could easily be substituted by
user interaction with a widget on the toolchest GUI.

A 'toolchest-apps-menu' done with a single, large
background image on a single canvas.
(The drawer edges are drawn on top of the single canvas.)

Some 'tkGooies' Architecture Notes :
('tkGooies' is to replace the deprecated 'feHandyTools')

In the 'feHandyTools' system (and other FE subsystems, like 'feAppMenus'), I use Tk 'include' files of common Tcl-Tk code shared among the many GUI's.

I incorporate the common code into FE Tk scripts via Tcl 'source' statements.

Many of these include files are used to give a 'common look-and-feel' to the various tkGUI 'apps' in the 'feHandyTools' system.

The common 'include' code includes statements to

  • set a common color scheme for the GUI's

  • set a common set of fonts (fixed-width and variable-width) for use in the GUI's

  • set a common set of widget geometry parameters (border widths, padding, etc.)

  • set user-preferred 'helper applications': text-viewer, image-viewer, HTML-reader, PDF-reader, image-editor, text-editor, etc.

  • set common images to be used in the GUI's (such as 'bullet' images)

One problem with this architecture is that it requires a lot of re-programming to extract an 'app' from the 'feHandyTools' system and set it up to work in a 'stand-alone' mode.

In contrast, the 'tkGooies' scripts have been written with all those 'parameters' --- color scheme, fonts, widget geometry parameters, etc. --- 'hard-coded' into each Tk script (other than the 'make_chest.tk' script that makes the toolchests).

I plan to continue with that architecture --- so that the 'tkGooie' scripts can be quickly extracted from the 'tkGooies' package and run on their own.

    It may help to point out that many of the 'tkGooie' 'apps' were originally written as code donations to the Tcl-Tk Wiki at wiki.tcl.tk.

    To donate that code, I wanted to keep the scripts pretty much self-contained --- that is, I did not want to require anyone to have to fetch a set of common 'include' files and install them in such a way as to get the 'app' running.

    Besides, if I ever wanted to change an include file, a lot of donated apps may have been rendered unexecutable, causing people to think the code was buggy and untrustworthy.

The 'tkGooies' are meant to be 'apps' that the user can split off from the package --- so that users can use each 'app' where they please and as they please.

Note that the 'tkGooies' are not entirely 'stand-alone'.

Quite a few of the scripts use a common 'RGB color selector' tkGooie, so a copy of that script may need to be included with a tkGooie 'app' (script or set of scripts) that was split out to be run on its own.

I have put comments at the bottom of the affected tkGooie scripts to indicate how the color-selector can be installed in the same directory with the 'app' that has been extracted --- so the 'app' can be run on its own.

Similarly, a few of the scripts need a 'font selector' tkGooie, which is under a 'Selectors' tkGUIs directory.

There are comments at the bottom of the affected tkGooie scripts to indicate how the font-selector can be installed with the extracted 'app'.

Documentation for each 'tkGooie' 'app' :

For most of the 'tkGooie' apps, documentation for the 'app' is available as text in a Help-window popup --- which is invoked via a 'Help' button on a GUI of the 'app'.

Some additional (or auxiliary) documentation may be available via the 'tkGooies' Description and Code Samples page on this 'freedomenv.com' web site.

But the most up-to-date documentation will probably be in the Help-text built into each 'app'.

An overview of the 'app-categories' of 'tkGooies' :

Here are some of the 'tkGooies' categories that occupy my mind --- along with indicators of some of the 'apps' that I would like to implement in those categories.

    (Some of these are 'done', but many could benefit from some further enhancements.)

  • 'PlotQuik' scripts:
    • pie chart
    • bar chart
    • points/line plots, from manually entered XY data
    • math expression
    • plot from data file --- 2 or 3 data columns
      (can be selected from many columns)
  • Sketching/Drawing/Painting/Diagramming scripts:
    • 'SketchOn' --- using an underlying image as a guide
    • 'Title Block Maker'
    • 'wheeeDiagram'
  • Image Warping/Merging/Morphing/Processing scripts:
    • rotate an image on a canvas background
    • apply 'pixel-magnets' to an image
    • warp an image, and make an animation
    • merge 2 images, and make an animation
    • 'wheeeMorph' - morph 2 images and make an animation
    • image editing with composite functions
  • Image/Video/Audio display/play apps:
    • find-and-show image files in a directory hierarchy
    • show image files from a 'playlist' file
    • find-and-play video or audio files in a directory hierarchy
    • play video or audio files from a 'playlist' file
    • find-and-play animated-GIF files in a directory hierarchy
    • play animated-GIF files from a 'playlist' file
  • 'Front-End' apps:
    • a GUI front-end for the 'ffmpeg' command,
      to record video from computer-monitor
    • a GUI front-end for the 'ffmpeg' command,
      to record video from webcam
    • a GUI front-end for the 'ffmpeg' command,
      to edit video
    • a GUI front-end for the 'ffmpeg' command,
      to edit audio
    • a GUI front-end for the 'xinput' command,
      to (re)define mouse button functions
  • Selector scripts:
    • FE color selector
    • FE font selector
    • some converter-selector scripts ---
      for velocities, angles, temperatures,
      distance, area, volume, weight, density, etc.
  • File-Manager scripts:
    • a select-file(s)-and-select-and-apply-a-script
      utility (like 'Gnome2 Nautilus scripts')
    • some file and directory selector GUI's
    • a file manager (double-pane or single-pane)
  • Tk GUI scripts for 3D utilities
    • 3D file viewers
    • 3D file makers
    • terrain generators (from images, etc.)
    • height file reader-viewer
    • molecule file reader-viewer
    • ray-tracer input makers
    • 2D map making from outline data
      (e.g. latitude-longitude data on a sphere)
  • Tk GUI scripts for computer management
    • meter GUI's to monitor CPU usage
    • meter GUI's to monitor memory and swap usage
    • meter GUI's to monitor network-interface activity
    • meter GUI's to monitor file-system space usage
  • Tk GUI Embellishment utilities
    • rectangular button makers
    • rounded-polygon maker
    • 'Super-ellipse' maker
    • 'Super-formula-shape' maker
    • image creation by functions
    • image editing by functions
    • toolchest makers
    • and more
  • Applied Math Tk GUI scripts
    • ordinary differential equation solvers
      for various physical systems
    • some rather general non-linear algebraic
      equation solvers
  • Tk GUI scripts for Education
    • plane geometry demos
    • fractal demos
    • other math demos, such as number theory demos
  • Tk GUI scripts for Entertainment
    • animation demos (some could be
      classified as Education demos)
    • games (mostly collected from
      code donations by others)
  • Tk GUI scripts that demonstrate
    handy Tcl-Tk Programming utilities
    • help balloon demos
      (variations on those from wiki.tcl.tk)
    • progress-bar demos
      (variations on those from wiki.tcl.tk)

Will there be a FINISHED 'tkGooies' ?   (NO)

In early 2015, the 'tkGooies' system was released in a rather preliminary form.

Many of the 'apps' were released with a list of 'desirable enhancements' on my mind.

In coming years, I hope to return to many of the 'apps' to implement those enhancements.

Furthermore, some of the 'toolchests' of apps have 'grayed-out' drawers in the toolchests --- with text indicating some 'apps' that are on my 'to-do' list.

I hope to add those apps to the toolchests someday --- along with many more that are not indicated by 'gray-drawers'.

I would like to say that the individual 'apps' and the 'toolchests' will someday be 'finished'. However, that will never be.

Most of the 'apps' will probably always benefit from some enhancements.

And there will always be more candidates for the toolchests.

I can only hope that the 'tkGooies' system in 2020 will be a much more 'filled-out' system than the first release in 2015 March.

And I can only hope that I will live to 2020, so that I can fill-out this system to a huge extent.

Enough of this 'introduction'.

The 'tkGooies' download file and install instructions are posted below.

and Install Instructions :

The install file for 'tkGooies' is a self-extracting shell script.

It would be nice if we could simply name it with a '.sh' suffix.

But it appears that most web browsers (or, actually, web servers) will assume that it is an all-text file, when, in fact, it has a gzipped tar file appended to the script portion of the file.

When a web browser asks for the file from the web server, if the file has the '.sh' suffix, the file will be downloaded in 'ascii' mode instead of 'binary' mode. The binary data in the file (the gzipped tar stuff) gets corrupted.

As a workaround, the '.sh' file is provided with a suffix of '.sh.exe' --- in hopes that the web-browser/web-server combo will think the file is a 'binary' file and download it in a 'binary' mode that does not corrupt the file.

    This seems to work. The '.sh.exe' file downloaded fine for me, using the Seamonkey2 web browser on Ubuntu Linux --- on a little Acer netbook.

* tkGooies *

Right click here, on the link to the '.sh.exe' file, and, in the popup menu of your web browser, choose to save this self-extracting shell script in a download directory on your machine. (Your web browser will offer an option such as 'Save Link Target As ...'.)


For good measure (that is, as an alternative), the install file is also provided with the suffix '.sh.tar'.

So if the '.sh.exe' file does not work for you (say, the web-server/web-browser 'dance' tries to do something 'funny' with files with a '.exe' suffix), right click here, on the '.sh.tar' file link, and, in the popup menu of your web browser, choose to save this self-extracting shell script in a download directory on your machine.

To see the quick version of installing 'tkGooies', see the SUMMARY section below.

I have not made a movie (yet) to show how to install the 'tkGooies' FE system. But installation is very similar to installation of the 'feAppMenus' FE system.

To see a movie on how to install 'feAppMenus', click here.

(Alternatively, right-click on this link and save the movie file to local storage.)

OR, go to the FE Videos page to see the install videos for the several FE subsystems.

The install procedure for each subsystem is similar --- namely, prepare and run a self-extracting script, in 3 quick steps.

SUMMARY of the Install Steps :

A detailed install description is available on a separate 'tkGooies' installation DETAILS page.

The details on that page will sound like a lot to do (partly because both command-line and GUI installation is described), but the install takes only a few steps after downloading the self-extracting install file to your computer :

  1. rename the file to remove the '.exe' or '.tar' suffix, leaving the '.sh' suffix intact

  2. make sure the '.sh' file has execute permission

  3. double-click on the '.sh' file to execute it
    (or right-click and Open)

and all three of these steps can be done in Nautilus or Caja or some other capable GUI file manager.

That is, the install can be done with mostly mouse clicks --- rather than using the command line.

    (The only keyboard use would be the Backspace or Delete key to remove the suffix.)

When you double-click on the '.sh' self-extracting install file, there is no need for a progress bar.

The install occurs within a second or two.

For more info on the nature and features of the 'tkGooies' subsystem, and 'licensing' info, please see the FE 'tkGooies' subsystem description page.

Or, see the 'tkGooies.hlp' text file in the 'helps' directory of the 'tkGooies' installation.

That help file is shown via the 'Help' button at the bottom of each of the 'tkGooies' toolchest GUIs.

(setting a desktop icon or command alias)

The 'tkGooies' start-up script should be available via either a 'soft-link' with the pathname


or via the 'actual' pathname

    $HOME/apps/tkGooies_linux_yyyymmmdd/scripts/ tkGooies_start.sh

where yyyymmmdd represents a release date and $HOME represents your (the installer's) home directory.

You can proceed to set up

  • a desktop icon in your desktop environment

  • OR a Gnome2 or MATE 'top-panel' quick-launch icon
    (or other desktops' equivalent)

  • OR a command alias

by using either of these types of pathnames.

Using the first type (the short name) means you do not have to deal with changing 'yyyymmmdd' release names when a new release is installed.

For details on how to do these setups, see the section called Running 'tkGooies' on the separate 'tkGooies' installation DETAILS page.

If you are using the 'short name' of the startup script, when there is a NEW release of 'tkGooies' to install, you can simply proceed to do the 3 install steps shown above. Then make sure the 'link' file


has been changed to point to the new 'tkGooies' script, in the new yyyymmmdd directory --- the full file pathname being

    $HOME/apps/tkGooies_linux_yyyymmmdd/scripts/ tkGooies_start.sh

For example, you can use the command

    ls -l $HOME/apps/bin/tkGooies_start.sh

to confirm that the link is pointing to the new install directory.


There is a flaw in the '2018jan16' release of 'tkGooies'. The start script may fail.

The simple fix is to copy two files

  • set_FEDIR.shi
  • set_feDIR.tki

from directory


to directory


Sorry about that. This will be fixed in the next release of 'tkGooies'.


If I install a new release of the 'tkGooies' system on one of my computers, here is what I do.

You may want to use this technique if you download a new release, to replace a previously installed release.

Assume that we have just installed the new release as described above.

It should not have 'collided' with a previous release, since each release directory name is different, say


and a newer release directory


In addition to that new install directory, the install makes a new 'link' file in a 'release-ID-independent' directory :


In particular, the 'tkGooies' install process makes a link from the 'tkGooies' startup script in the 'yyyymmdd' install directory to a release-ID-independent file :


where $HOME represents your home directory name.

By using that soft-link, instead of a fully-qualified name like

    $HOME/apps/tkGooies_linux_yyyymmmdd/scripts/ tkGooies_start.sh,

we do not have to remember to do steps like the following :

  • change the script name for a desktop icon that you use to start the 'tkGooies' system,

  • change the alias that you set for the 'tkGooies' startup command.

To define an 'alias' for the startup command (with the release-ID-independent 'link' of the 'tkGooies' install architecture), you can simply use a command such as

    alias tkg="$HOME/apps/bin/tkGooies_start.sh"

and not have to change the alias with each new release.

Similarly, for a Gnome2 or MATE desktop icon, you can right-click on the desktop to create an icon for 'tkGooies' startup.

In the popup menu that appears, there will be a 'Command:' entry field.

You can simply use


in the 'Command:' entry field and not have to change the icon's command with each new release.

If you added 'tkGooies' as a 'quick-launch' icon in the Gnome2 or MATE 'top-panel' at the top of the screen, you could use the same technique to avoid having to update the properties of that icon with new releases of tkGooies.

We are now ready to use the NEW installation, via desktop (or 'top-panel') icon or via command alias.

Some previous releases

Just in case there is some deficiency in the latest release of the 'tkGooies' system, here are some previous install files --- self-extracting scripts.

You can right-click on any of these links and use 'Save Link Target As ...' (or the equivalent) to save the file in your downloads directory.

Then use the 3 simple 'Summary' steps described above to install the (older) 'tkGooies' system.

FE 'tkGooies' . . . FREE **END-USER** utilities

that indicate the power and extent of Tcl-Tk

Bottom of this
'tkGooies' FE subsystem Download page.

FE = Freedom Environment

To return to a previously visited web page, click on the Back button of your web browser a sufficient number of times.

OR, use the History-list option of your web browser.

OR ...

< Go to Top of Page, above. >

Page history

Page was created 2012 Oct 25.
(to announce intent to release END-USER tkGooies)

Page was changed 2015 Mar 19.
(for 1st release of 'tkGooies')

Page was changed 2015 Dec 11.
(for 2nd release of 'tkGooies')

Page was changed 2016 May 18.
(for 3rd release of 'tkGooies')

Page was changed 2016 Oct 07.
(for 4th, '2016oct07' release of 'tkGooies')

Page was changed 2017 Sep 11.
(for 5th, '2017sep10' release of 'tkGooies')

Page was changed 2018 Jan 16.
(for 6th, '2018jan16' release of 'tkGooies')

Page was changed 2018 Aug 12.
(Added css and javascript to try to handle text-size for smartphones, esp. in portrait orientation.)

Page was changed 2019 Jun 12.
(Specified image widths in percents to size the images according to width of the browser window.)

Page was changed 2024 Jun 18.
(Changed links to other web pages so they load in a separate window or tab so that this page remains available in its window or tab.)