Updated 2010-05-06 09:22:56 by MGS

MGS The eWidgets Toolkit is a collection of extended widgets and dialogs for Tcl/Tk. Each widget/dialog is designed to be self-contained, efficient, lightweight, cross-platform, and to work equally well on large and small displays.

This will form the basis for my other project Mogul.

eWidgets was originally going to be a substantial rewrite of the BWidget toolkit, but I got very bogged down in the complexity of its internal architecture. I also had already written many new widgets, so they have formed the basis of this toolkit.

I would like to hear from anyone who has comments (good and bad) about BWidgets and other mega-widget libraries. In particular, things that don't work, things that are missing, extra functionality, etc. And if you're looking for a new kind of widget that doesn't exist, I might be interested in writing it. I'm always looking for new and better ways of doing things. Please feel free to drop me line at markgsaye @ gmail.com

Q. Where does one find this toolkit? I don't see a URL.

A. One doesn't, yet. I'm still very busy writing it. When I have an architecture which is somewhat stable, with widgets that work (!), some examples, and a smidgin of documentation, I will make an announcement, and upload stuff to http://ewidgets.sourceforge.net/ and http://sourceforge.net/projects/ewidgets/ . I'll try to release individual packages as and when available.

Here's a partial list of widgets, dialogs and libraries that will be included:


  • button - generic button/checkbutton/radiobutton widget (designed for toolbars)
  • calendar - date selector widget (useful with popup widget)
  • combobox - combobox widget (uses popup widget)
  • drop - collapsible drop-frame widget
  • entry::file - file/path-completion for an entry widget
  • entry::history - history for an entry widget
  • filelist - listbox file browser widget
  • filetree - tree file browser widget (using tree widget)
  • frame - scrollable frame widget
  • mdi - MDI widget
  • menubar - menubar widget (using user-definable menu configuration files)
  • notebook - notebook widget
  • panel - panel widget (like MS Outlook)
  • popup - popup widget (e.g. as used by combobox, calendar)
  • progress - progress bar widget
  • scroll - scrollable-widget widget (with scrollbars that appear only when needed)
  • scroller - 2d x/y scrollbar (similar to BWidget's ScrollView)
  • slide - slide widget (similar to scale widget)
  • spinbox - spinbox widget
  • text::listbox - hierarchical listbox widget
  • text::map - graphical widget to display text widget search results (adapted from Roy Terry's Hits!)
  • titleframe - titleframe widget
  • toolbar - toolbar widget (uses grid and clone libraries)
  • tooltip - tooltip widget (balloon help)
  • tree - canvas-based tree widget
  • window - generic window/toplevel widget


  • dialog - generic dialog window
  • dialog::color - color selector dialog
  • dialog::directory - directory selector dialog
  • dialog::error - improved bgerror dialog
  • dialog::file - file selector dialog
  • dialog::fileprop - file properties dialog
  • dialog::font - font selector dialog
  • dialog::login - a username/password login dialog
  • dialog::message - message dialog
  • text::find - text find dialog/widget
  • text::goto - text goto dialog/widget


  • canvas - library of canvas widget routines (convert to polygon, reflect, rotate, see, tile)
  • clone - library to enable cloning of widgets (including heirarchies), procs (see cloneProc), namespaces, variables, images, etc. Widget tree cloning should be useful for tearoff toolbars (i.e. clone a frame to a toplevel).
  • color - library of color routines (see bevel 3d)
  • date - library of date conversion routines
  • file - library of useful file commands
  • focus - library to manage a stack of focus requests
  • font - library of font routines
  • grab - library to manage a stack of grabbed windows
  • grid - library of grid routines (reflecting/inverting/transposing/inserting & deleting columns & rows/etc)
  • icon - library of icon routines (finding, refcounting, etc)
  • image - library of image routines (sizes, etc)
  • interp - library of interp routines (notably the ability to dump the complete state of an interp)
  • label - library of label widget routines (wrapping, selection) See [1]
  • list - library of useful list commands
  • listbox - library of listbox widget routines (move selection up & down)
  • source - library to enable debugging/auto/encoding/namespace/etc for 'source'
  • string - library of string routines
  • text - library of text widget routines (maybe)
  • text::sync - library to synchronize two or more text widgets
  • window::or - library to handle full-screen windows


I will put links here to individual packages as and when they become available:

LV [2003/05/14] Q. How do the entries above such as text, frame, etc. that are currently in Tk differ from the Tk versions?

MGS - At the moment, I'm not sure that the text library will exist. It was intended for a collection of miscellaneous text widget commands, most of which have now been split out into separate libraries/widgets such as text::find, text::goto etc.

The label library contains miscellaneous commands specific to label widgets. For example, see label selection and label wrapping. See also: [2]

The canvas library contains miscellaneous commands specific to canvas widgets. For example: canvas::see, canvas::tile, canvas::convert, canvas::rotate, and more.

The window widget is effectively just a toplevel with some syntactic sugaring to incorporate some extra properties, notably the toplevel-specific options from the wm command. i.e. you could do things like: window .mywin -title "My Window Title" -propagate 0 -transient . . This also means that you can put wm properties into the options database.

The frame widget is a scrollable frame widget, but not using a canvas as most scrollable widgets do. The scrollable area of the widget works more intuitively (I think) than, say, the BWidget's version. Actually, I'm trying to come up with a different name - I didn't want to call it scrollframe or anything like that, but something akin to frame that implies the scrollability. I've only got panel and sheet so far, but I've already got a panel widget (like the Outlook panel) and sheet sounds too like a spreadsheet. Back to the thesaurus, I think.

The listbox library contains miscellaneous commands specific to listbox widgets: moving the selection up/down, deleting the selection, chronological selection, sorting, etc.