Why are Tk GUI's considered ugly?

I think part of the reason is that Tk is surprisingly powerful and easy to use but it doesn't do much hand-holding. Since it is so easy, people with little experience in UI design can get something to work in very short order. But, without a lot of experience they rely on defaults and shortest-path-to-a-solution (read: don't take time to hide scrollbars when they aren't needed, don't use common idioms for toolbars, don't properly align widgets, etc).

Unfortunately, Tk's defaults aren't always the prettiest. As the screenshot in the question shows, the default uses relatively thick border widths and suboptimal fonts, and the checkboxes are indeed straight out of the 80's. In the hands of an expert, though, all these problems are minor issues that can be take care of in idle moments.

For example, with five minutes of tweaking, the original screenshot can look like this:

slightly improved ui

Certainly that's still a bit clunky looking, but arguably it's better than the original by a considerable bit. With an hour dedicated to the task, several more improvements could be made.

With tk 8.5 (and actually for a couple years prior) there is support for themes and for native widgets, and even the X11 version gets a minor facelift. Tk is still behind the curve in eye candy though, forcing one to "roll their own" if the design calls for gradients, animations and so forth.

Tcl and Tk, however, remain a good pragmatic solution for most types of applications. If you're trying to compete with a flash application you'll lose. But if you have an industrial application that just needs to work and be usable and perhaps multi-platform, Tk is still one of the best choices out there.


As of 2015, there's a nice write-up about modernizing Tkinter's IDLE IDE. The article describes some of the steps taken to make IDLE more modern looking:

  • http://www.tkdocs.com/tutorial/idle.html

The "it's just different" argument is, in fact, the main reason for me. Tk GUIs don't look and behave like a native application, which affects the "look & feel" in multiple small ways, which make a complex app feel weird and clunky compared to native apps on given system.

File dialogs may be a perfect example of what I am writing about: they may not be "worse" or "better" than native dialogs on some system, but they are DIFFERENT, they behave differently to all the rest of applications on the system.

If you're MacOS X user, you may get a feel of it by comparing native Mac apps with apps running on Mac with X11 compatibility layer (like Gimp or Inkscape). They behave differently to all other apps (no menu at top bar, cmd+tab works a bit differently, cmd+backtick works much differently), so - while their behaviour is fine on Linux X11 desktop - the same behaviour feels weird and clunky on Mac.

Downside of Tk is that these GUIs aren't actually native anywhere.

For a portable UI, I may recommend wxWidgets, which are just a common API layer (a facade) for whatever native UI your system provides. It may be a bit offtopic for your current situation, but it may be worth looking at anyway.


TK has considerably better support for native look-and-feel GUI's than it used to. Earlier versions of Tk had a motif-ish look and feel, which was intended to be used with motif-based desktop environments such as MWM and CDE. In this environment it looked like a native application. For a long time, Motif was used as a default GUI toolkit for X11 apps. The advent of GTK and (to some extent) QT means that this is no longer really the case for many such applications.

Most modern cross-platform GUI toolkits - GTK, QT Tk, WXWidgets and others - have some mechanism to use the underlying native widgets now. WX was designed to do this from the beginning - GTK and Motif versions on X11, Win32 on Windows and (IIRC) an OSX version. GTK has a theming engine and uses themes based on native widgets. QT emulates the look and feel and Tk has a wrapper for the native toolkit.

Examples of TK apps with native look and feel:

  1. SnackAmp (Win32 on Vista)

SnackAmp Tk GUI on Windows Vista

  1. PostgreSQL Access on Linux

Native looking Tk API