Make keyboard more responsive
Tidy up the repo
Optimized PNG encoding
Removed unnecessary backslashes at end of lines

If there is an open (), {} or [] pair, Python will continue the
statement onto the next line, no need for a backslash then.
Look for ifconfig in /sbin

In most Linux distros, ifconfig won't be in the $PATH when running as
an ordinary user.
Deduplicated code in getkeys()
Don't treat the encryption type radio buttons as a keyboard

The only code that was shared with the keyboard implementation was
getkeys(), but we don't need support for a grid of keys when we have
a single row of radio buttons.

Also do wrap-around instead of clamping on cursor movement through
these radio buttons.
Store keyboard layout in tuple-of-tuples instead of dictionary

What we want to know is the key label for a given row and column,
so make sure that we can easily index the data structure for the
keyboard layout by row and column.

Also do wrap-around instead of clamping on cursor movement through
the keys on the keyboard.
Replaced getkeys() by a global dictionary named keyLayouts

This ensures the keyboard layout data structures are initialized only
once; they are fetched quite often.

Simplified nextKeyboard() and moved it next to keyLayouts, since the
cycle order must be in sync with the supported layouts.

Removed the code mapping 'WEP-40' and 'WEP-128' to the 'wep' layout,
since 'WEP-40' and 'WEP-128' are never used as layout names.
Fixed shape of START and SELECT (they were reversed)

Also removed some duplication from the drawing code.
Removed obsolete global variables

Recent cleanups obsoleted 'maxrows' and 'maxcolumns'.

The 'keyboard' variable was being returned from one function but
none of the callers used the return value. Also the variable was
never assigned to after initialization, so it didn't contain useful
information anyway.
Made it clearer that 'encryptiontypes' is read-only

Use a tuple instead of a list as its type. Don't use the "global"
keyword: that is only necessary when a global variable might be
assigned to from inside a function, it is unnecessary for reading.
Draw logo using new LogoBar class

This allows the font lookup and text rendering to be done only once
instead of on every redraw.

Note that the bar and the logo itself are always drawn together, so
I put them in the same draw method.
Tweak logo colors and positioning

The "G" of "GCW" aligns with the text inside the menu labels now,
instead of with the cursor edge.

The slightly larger logo font is avoid a particularly blurry upper
edge.

The red color logo was tweaked to better match the logo bar background,
while still matching the main menu cursor as well (as in, looking
similar: it is no longer exactly the same color).
Draw buttons using anti-aliased circles

This looks a lot smoother.
Also increased the font size slightly.
If scan failed, set 'uniq' to empty

If it is undefined, the application crashes.
Corrected left edge of error message clear rectangle

It should really be computed from constants rather than hardcoded,
but that's for later.
Make main menu cursor wrap around at top/bottom