[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [pygame] New GUI
Marcus von Appen wrote:
On, Tue Jan 22, 2008, Kamilche wrote:
[Unhappiness about the existing GUIs]
It's interesting to see that a lot of people tell some public
list/forum/whatever how unhappy they are with existing solutions, but do
not dare to get into touch with any of the solution developers or even
describe the problem areas they see somewhere.
It explains, why there's so much lousy software on the market. People
just complaining, but not helping in any way.
Kamilche, as I am the OcempGUI head, I'd like to hear where exactly your
problems and expectation were (and still are) regarding an user interface
system for your applications and games.
Regards
Marcus
Sure. I've attached a more thorough critique of some of the features in 
Ocemp GUI, since you're interested.
General and UI Observations
----------------------------
In mnemonics, '#' is used to denote the accelerator key, instead of '&' 
- nonstandard. The mnemonics don't work with the right alt key, just the 
left alt key.
In radio buttons, multiline text is centered by default. It really 
should be left aligned.
There'e no 'pygame.quit' at the end, so after running, the examples hang 
and you have to manually close the DOS box. This makes them hang in IDLE 
as well.
The borders and window styles are non standard, and unattractive.
The font has hinting problems - a different font would be better.
There's no selection capability on the text edit boxes - you can't drag 
your mouse to select text, have it highlight, and do standard text 
editing on it.
Many examples are so simple as to be useless, such as the 'event.py' 
example. An event showing a button actually executing code when clicked 
would be good, instead of showing a 'picture of a button' in one example 
and showing an 'event that's raised' in another example.
In the 'example.py' application, the 'box' entry shows 4 items placed on 
top of each other. Clicking on the background items brings them to the 
foreground, and they never go back. Was that intentional? Why are they 
changing zorder? This is not obvious to me.
In the file dialog example, clicking '..' when at the top doesn't bring 
you to the list of drives. You have to manually overtype drive C with 
drive D using the limited editing capability allowed in the folder name box.
The image map example suffers from performance problems. Just moving the 
mouse over the imagemap box causes events to queue up and get rendered 
so slowly, you quickly wonder if the example is broken. A single swish 
of the mouse from left to right, and you have to wait 3 seconds for the 
display to catch up.
The sliders suffer a performance problem as well. Dragging the sliders 
isn't instant, you have to wait for it to catch up to the mouse.
The 'hello world' examples have an unpainted area to the right of the 
window, that is picking up whatever was underneath when the window was 
created.
The main window is not resizable.
The status bar is not recognizable as such, it looks like a frame with 
text in it. It needs to look like a status bar, and have multiple panels 
you can set.
The toggle buttons don't look any different than depressed normal 
buttons. Toggle buttons usually look significantly different than normal 
buttons, by such hints as having a different shape, different shading, 
or graphics on them as well.
There are no examples of an FPS indicator, a global event that several 
controls might want to handle.
The tooltip makes no attempt to stay on screen - it gets cut off on the 
right.
The window example is too small - it shows a single button that you can 
click. I would like to see window examples throughout the examples, not 
just this unrealistically simple example.
No fullscreen mode available.
No 3d option for the text.
No menus.
No way to enlarge/shrink controls when the window size changes.
Code Observations
-------------------------
I don't have time to critique all the example code, so I just ran 
through the 'radio.py' example.
'from ocempgui.widgets import *' - pollutes namespace
After creating a table, you must set the alignment explicitly for each 
row. Why not have the most common alignment, which is probably 
align_top, the default?
    table.set_row_align (0, ALIGN_TOP)
    table.set_row_align (1, ALIGN_TOP)
When creating radio buttons in a loop, you must specify the group 
manually with an if switch. Why not have all radio buttons that belong 
to the same parent, automatically in the same group?
        btn = RadioButton (s, group)
        if i == 0:
            group = btn
By the end, you realize it requires 88 lines of code to create a simple 
screen that doesn't DO anything. Ideally, a GUI builder should build it 
for you and save the results to a file. In your code, you should just 
have to say 'load thatscreen' and put in code to actually do program stuff.
I don't like having to execute a 'connect' for every button I want to 
click. For standard controls and most situations, it's likely that the 
parent of the button (the frame or the window) wants to handle the 
button's click. Why do I have to code a connect for every little bit of 
functionality? It would be better to have the 'obvious' cases 
automatically handled, and reserve 'connect' and its ilk for global 
events that multiple controls might want to handle.
There's more, but I don't have time to review it further. I hope you 
find this partial list of limitations useful.
--Kamilche