Archive for the ‘User Interface Design’ Category

A year after my blog got hacked, I’ve finally bothered to restore and fix everything; White-Walls is back!

In the time that’s passed, my interest in PyQt4 and Qt simmered into actual UI development. I turned sketches and rough designs into working code, learning a great deal in the process. I apologize to Python 2.x programmers, but Python 3 is my flavor of choice. That said, all of the code should be easily adaptable into working Python 2.7 code for those who wish.

I’ve named the project KyUI, pronounced KYOO-ee, because Q-UI was taken. The goal behind KyUI is straightforward: programmers often have to recreate the wheel for their software, which is a waste of time. There are quite a few widgets and dialogs that are common to most desktop applications but are not provided with Qt and are unavailable as source without stripping from other OSS projects. The alternative that most developers are left with is to rewrite dialogs for things like setting hotkeys, tree widget headers, and toolbar buttons. Another simple example is adding a gripper to QSplitterHandle, which is lacks one by default under most styles.

I’ll be discussing various topics here about thoughts on user-interface design, ideas I have, KyUI progress, and how-tos for writing PyQt code that goes beyond Mark Summerfield’s excellent Rapid GUI Programming with Python and Qt, including keyword arguments, a quick-and-easy solution regarding enumerators (e.g. Class.EnumValue in Class.Enumerator working without complex fussing, named tuples, or custom classes)

I’ve also done some serious hacking with Doxygen to make the result look (mostly) like Qt’s internal documentation, which is also available in the SVN source tree.

Look for more later.

I’m reading through About Face 2.0 again, in more detail. I’ve come across the author’s chapter on Verb-Object and Object-Verb thinking with respect to user interaction. His introduction explains that Verb-Object was the original method of interaction, but that WIMP changed that. His point, essentially, is that the ability to interact with multiple objects requires the programmer to handle a more Object-Verb method of thinking.

The example provided goes like this: you’re in a grocery store. You pick out a number of items to purchase. The items are objects, and purchasing them is the verb. The example explains that this is, in essence, selection, which puts a kink in the verb/object order, because multiple objects may be acted on. My first thought on reading this, before I finished, was that the act of selecting is in itself a verb, preserving Verb-Object order. The author points out that a user chooses his objects before interacting with them, such as selecting multiple files for deletion.

In my mind, this is fallacious. Yes, it appears the object is designated first, but there are caveats from all three perspectives that count: the user, the computer, and the programmer. Firstly, selection is, in itself, an action. From the perspective of the computer, Verb-Object order is maintained. Like the clipboard, the selected items are added to a stored list. When a user enters a command (Verb), the computer checks to see if items are already selected. Since the user has carefully selected a number of files, that list is called up in lieu of a single item (or none, if none had been selected). The order, in Verb-Object thinking is this: Select: Item, Select: Item, [repeat n times], Delete: Selection. Verb-Object thinking is preserved from the computer’s perspective.

From the user’s perspective, the same is true: the user does not think, “File 1, select, file 2, select, delete”. Really, the user doesn’t think about selecting individual items at all, although his behavior is still Verb-Object oriented. The thinking follows more like “select items”, which is Verb-Object, followed by “delete selection”. Again, this is Verb-Object thinking.

To the programmer, Verb-Object thinking is simply mandatory. Functions, methods, or whatever the programming language being used calls them, are in essence, verbs or commands. They are passed arguments as objects. Whether using functional or object oriented programming, the action is always first. The programmer doesn’t define actions for every object, he defines actions that are given objects.

Okay, I’m done.