[Edu-sig] Edu-sig Digest, Vol 22, Issue 26

John Zelle john.zelle at wartburg.edu
Fri Jun 3 04:21:43 CEST 2005


I know there've already been a couple responses on this. I've been 
meaning to reply, but been preoccupied. But I found this post very 
interesting, and am wondering if more discussion might be in order.

Bob Noonan wrote:
> Toby Donaldsoon writes:
> 
> 
>>I've been involved with teaching CS1/CS2 style courses for the last couple
>>of years where Python is used in the first course, and Java in the second.
>>It's a good combination.
> 
> 
>>Simple Python programs are usually much easier to read and simpler to write
>>than simple Java programs, and so students new to programming really like
>>it.
> 
> 
> I would love to switch our CS1 course to Python.  It seems like I am always 
> about 5-8 years ahead of my department.  After starting in 1997, it took me
> until 2003 to get our CS1 course switched from C++ to Java.
> 
> At the time we did it, I knew Python was a better choice, precisely because:
> 
> 1.  It is a good scripting language.
> 
> 2.  50% of our CS1 students never take another CS course; clearly, these 
> students are better off with Python than with Java.
> 
> The one place where Python is clearly deficient IMHO is in GUI programming.
> Tkinter (and the TK toolkit) are nowhere near the quality and simplicity of
> Swing.   Pack as a layout manager is difficult, at best.  And yes, I am aware
> of other GUI interfaces such as wxPython, but the infrastructure is not there
> to support them.  All of the Python textbooks that I am familiar with cover
> only Tkinter.
>

I realize that GUI toolkits are probably more a matter of taste and 
experience more than any other component of development. But, I wonder 
if you could explain to me in what ways you see Swing as simpler than 
TKinter?

Tkinter is by far the simplest GUI toolkit I've ever worked with 
(including: Xlib, Tkinter, Swing, Java AWT, GTK, wxPython, and Qt). You 
can get everything you need to know to start working with Tk in about a 
25 page summary. Swing requires a couple hundred pages minimum in my 
experience. I've given software engineering classes a quick rundown on 
Tk in one or two lectures and then let them  go their own way. In Swing, 
I taught a 1.5 credit hour class over an entire semester, and they still 
didn't really get to the point of being able to write interesting programs.

In terms of quality, TK does have some deficiencies (limited widget set, 
somewhat old-fashioned look and quirky behavior across patforms). As 
such, I consider Tkinter a great tool for easy prototyping, but not 
necessarily so good for finished products. On the other hand, it has 
been used for some very impressive apps. I would not consider the packer 
to be a deficiency. In TK, you can learn this one (relatively) simple 
geometry manager and do pretty much anything you want. In Swing, you 
have to learn a bunch of layout managers to do anything remotely 
sophisticated, and if you're talking difficult, the Swing gridbag is far 
more unwieldly than the Tk packer. Plus, Tk also offers the gridder and 
placer geometry managers, if you really want something other than packer.

I know I am not alone in feeling that Swing is one place where Java has 
really failed miserably. It is a complex, bloated framework that (often) 
produces slow, cumbersome, memory intensive, and ugly interfaces (can 
you get anti-aliased fonts in swing?). IBM ditched Swing and built it's 
own toolkit for developing Eclipse. I suspect more and more developers 
will look that direction.

The absolute beauty of Python is the "embarrassment of riches" when it 
comes to high-quality GUI toolkits. Whatever style framework you like, 
you can use it in Python. As someone already mentioned, if you like 
Swing, then use it in Python through Jython (that's about the only way I 
can tolerate Swing, myself). Tkinter is a great choice for simple GUIs 
and learning basic GUI principles. Wx offers a nice cross platform 
solution that is extremely well supported for Python. Lots of folks 
swear by GTK and Glade. I am personally very impressed with PyQt, and 
think it is well worth a look if you want to do industrial-strength GUIs 
with a modern, well-deisgned, cross-platform  framework. There's at 
least one book covering Python with QT, and it's very easy to translate 
the excellent C++ documentation directly into working Python code.

In summary, Python seems a much more GUI-friendly language than Java, so 
I don't think that should stand in the way of its use in intro 
programming classes. If I had to teach GUIs early on, I would definitely 
choose Tkinter over Swing. Of course, whether GUI programming is an 
important topic for intro classes is a whole different matter...


-- 
John M. Zelle, Ph.D.             Wartburg College
Professor of Computer Science    Waverly, IA
john.zelle at wartburg.edu          (319) 352-8360


More information about the Edu-sig mailing list