Spinboxes are useless

One of my pet hates in GUI widgets is the 'spinbox', and I especially dislike the idea of a floating point spinbox. I think for technical reasons I had trouble wrapping the KDE3 floating point spinbox in korundum, and couldn't get particularly worked up about fixing it. But I was a bit depressed to find out that Qt4 has a floating point spinbox widget (although I didn't obstruct its inclusion in Qt4 QtRuby).

In El's blog about improving the usability of KDE's dialogs she uses spinboxes (yuck!). For instance, I see 'pointer threshold' with a default value of 4 pixels and a possible dynamic range of 1 to 20. This means to use the spinbox to raise the value from 4 to 20 you have to click on it 15 times. Surely this is braindead? If the option has a small range of possible values, it can be a pulldown menu, or if it can be a number with a large range of values, then just let the user type in the number, and validate that they have entered a number. I just hope we can ignore MicroSoft as a paragon of usability expertise and just do the right thing as a result of personal inspiration and peer review like the rest of KDE.


but, scrollwheel! and, you can type directly in the spinbox widgets anyways. they just make it much easier when you're only adjusting the value a little. I never click the actual arrows, I spin the scrollwheel - that way I don't even need to be awake enough to think numbers, just "more" or "less". yes, I use the suspend feature on reminder popups far too much :)

pulldown menus have a nasty tendency to reverse the behaviour of the scrollwheel, btw. it bugs me.

By chani at Sun, 09/10/2006 - 21:52

I don't see the problem with spinboxes in El's example.
You have both the slider and the spinbox. You can set the value by moving the slider, by using the arrows and by typing it directly into the spinbox. What makes a spinbox worse than a lineedit? Nobody is forced to ever use the arrows if he doesn't want to.

By Frank Osterfeld at Sun, 09/10/2006 - 22:20

I suppose it's subjective, but I just find spinboxes really ugly. They don't have them on the Macintosh, and El's example would just have a slider, and a text edit field where you could enter the value directly.

Correction: I just looked at Interface Builder on Mac OS X, and it does have an 'NSStepper' widget which is just two up/down arrows. It doesn't have the text of the number between the arrows, and I assume it controls a seperate editable text widget. I'll have to go through the Mac apps I've got and see if I can find examples, to see if it looks less ugly.

By Richard Dale at Mon, 09/11/2006 - 05:30

Integer spinbox is not that bad, but I've got problems with using double spinbox in my app as well. Round errors made it useless. A slider supporting double values could be slightly better thing for mouse users - and we can get a small improvement for KDoubleNumInput class in KDE4, for free.

By Jarosław Staniek at Sun, 09/10/2006 - 23:21

I understand you don't see the use for spinboxes. I guess you use the computer in such a way that you don't have a need for them. And thats just fine!
Thing is; they do serve a need.
Its a formatted and validated input widget that has a clear representation to show the context and it has a clear interaction method which makes the learning curve very easy.

The Qt ones aren't the best there are; the suffix tends to get screwed quite often. But playing with KOffice spinboxes (which are extended from the normal ones) I would not miss all the functionality spinboxes give me for the world!
* Using scrollwheel to move just a little bit
* Using arrow up/down to move it just a little bit.
* Using the buttons when I don't have a mouse with scrollwheel handy but just my laptop-touchpad. Keep the button down to trigger repeat.
* Being able to copy paste a value from another place.

In KOffice we added a unit convertion; if a user types "1dm" the spinbox will just convert it to inches or mm if thats the current document-wide unit setting.

One feature I've always wanted to implement, but never gotten around to is that if I click on the button it currently already repeats if I keep depressing the button. What I wanted to add is the speed in which the value goes up/down based on the distance my mouse is from the spinbox. So I can move mouse mouse fast to the top of the screen, keeping the mousebutton pressed, and the value goes up quite quickly. Qt has a stupid bahavior that it stops counting as soon as I move the mouse out of the widget :(
Also I wanted to add modifiers (shift) to make the value increase differently in double-spinboxes. But never got around to doing so...

Anyway, I disagree that they are useless :)

By Thomas Zander at Mon, 09/11/2006 - 08:47

Well, fair enough. I shall have a look at Mac OS X apps, and see how they use their equivalent of spin boxes. It might just be that I find the two tiny arrows close together really ugly, and a better design with larger clearer ones would make all the difference.

What's the difference between using the actual scroll wheel on your mouse to spin through the values, as opposed to having something that looks like a scrollwheel or slider on the screen and manipulating it directly? I suppose a spinbox might take up less screen space. If the slider controls a numeric value in an editable text field, you can always paste in a number from somewhere else.

I'm not sure about 'magic spinboxes' doing unit conversions. I'd would have to see what it looked like. For something like that, I would prefer to see both the value I originally entered and the converted value.

By Richard Dale at Mon, 09/11/2006 - 09:20

Well, I think the best thing would be this features but instead of those two arrow buttons a slider. Well, if the value-range is limited. If not, there is no alternative to spin boxes.

Btw.: A thing that maybe would make sense under some circumstances would be a non-linear slider. e.g. a logarithmic slider or a slider with a custom translation function. Sometimes you need more accuracy for the lower values, but less for the higher.

By Mathias Panzenböck at Mon, 09/11/2006 - 12:55