An issue related to choice of language is choice of X toolkit for GUI programming. Recall the discussion in Chapter 1 (Philosophy) of how X separates mechanism from policy. Each possible choice of toolkit will give you a slightly different look and feel.
Your choice of X toolkit will be connected to your choice of application language in two ways: first because some languages ship with a binding to a preferred toolkit, and second because some toolkits only have bindings to a limited set of languages.
The Tk toolkit is the oldest of the four and has the advantage of incumbency; it's native in Tcl and bindings to it are shipped with the stock version of Python. Libraries to provide language bindings to Tk are generally available for C and C++. Unfortunately, Tk also shows its age in that its standard widget set is both limited and rather ugly. On the other hand, the Tk Canvas widget has capabilities that other toolkits still match only with difficulty.
GTK began life as a replacement for Motif, used with the GIMP. It is now the preferred toolkit of the GNOME project and is used by hundreds of GNOME applications. The native API is C; bindings are available for C++, Perl, and Python, but do not ship with the stock language distributions. It's the only one of these four with a native C binding.
Qt is a toolkit associated with the KDE project. It is natively a C++ library; bindings are available for Python and Perl but do not ship with the stock interpreters. Qt has a reputation for having the best-designed and most expressive API of these four, but adoption was initially hindered by controversy over early versions of the Qt license and is still slowed down by the lack of a C binding.
wxWindows is also natively C++ with bindings available in Perl and Python. The wxWindows developers emphasize their support for cross-platform development heavily and appear to regard it as the main selling point of the toolkit. Another is that it is actually a wrapper around the native (GTK, Windows, and MacOS 9) widgets on each platform, so applications written using it retain a native look and feel.
Table 13.2. Summary of X Toolkits
Toolkit | Native language | Shipped with | Bindings | ||||
---|---|---|---|---|---|---|---|
C | C++ | Perl | Tcl | Python | |||
Tk | Tcl | Tcl, Python | Y | Y | Y | Y | Y |
GTK | C | - | Y | Y | Y | Y | Y |
Qt | C++ | - | Y | Y | Y | Y | Y |
wxWindows | C++ | - | - | Y | Y | Y | Y |