UI/UX
Add a chapter on UI/UX (suggested by Markus Monderkamp)
Frameworks:
- Qt
- Tkinter
- FLTK
- wx
- curses
- web
Thank you for mentioning UIX-concepts for Python:
- For designing Python-Tk(inter)-Interfaces I found a GUI-designer named spectcl (http://spectcl.sourceforge.net/).
- For GTk and python I found glade (https://glade.gnome.org/).
- Designs of Qt interfaces are facilitated by Qt Creator (https://en.wikipedia.org/wiki/Qt_Creator) with integrated debugger as far as I remember.
- Wx-layouts are supported by wxformbuilder (https://sourceforge.net/projects/wxformbuilder/) and wxGlade (http://wxglade.sourceforge.net/).
- Concerning (n)curses forms with python worth mentioning maybe npyscreen (2) (http://npyscreen.readthedocs.io/introduction.html) and urwid (http://excess.org/urwid/).
- If you want to make reference to surfaces with SDL and python there are e.g. IDEs named pygame (https://wiki.python.org/moin/PythonGameLibraries) or pyopengl (http://pyopengl.sourceforge.net/). The latter makes use of pygame.
- Interfaces may also be build using GL with for example pyglet (http://www.pyglet.org/).
Who doesn't want to fiddle with UIX-Details uses builders when he comes from groovy/Java.
In Python applies according builders: (https://stackoverflow.com/questions/11977279/builder-pattern-equivalent-in-python) In Python a Builder pattern is not needed Python supports named parameters, so this is not necessary. You can just define a class's constructor:
class SomeClass(object):
def __init__(self, foo="default foo", bar="default bar", baz="default baz"):
# do something
and call it using named parameters:
s = SomeClass(bar=1, foo=0)
Example: StringBuilder
A related pattern is Java's StringBuilder, which is used to efficiently construct an (immutable) String in stages. In Python, this can be replaced with str.join. For example:
final StringBuilder sb = new StringBuilder();
for(int i = 0; i < 100; i++)
sb.append("Hello(" + i + ")");
return sb.toString();
can be replaced with
return "".join("Hello({})".format(i) for i in range(100))