forging-python icon indicating copy to clipboard operation
forging-python copied to clipboard

UI/UX

Open tebeka opened this issue 7 years ago • 2 comments

Add a chapter on UI/UX (suggested by Markus Monderkamp)

Frameworks:

  • Qt
  • Tkinter
  • FLTK
  • wx
  • curses
  • web

tebeka avatar May 19 '18 06:05 tebeka

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/).

frayoyo avatar May 21 '18 05:05 frayoyo

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))

frayoyo avatar May 30 '18 06:05 frayoyo