... sufficient resources to control a very large number of bits.
The Nybble protocol, https://sourceforge.net/projects/nybbler, is used to communicate between Python and and port expander chips.
Tkinter is used for both the GUI and as a thread manager for the serial port interface. This makes it possible to have a simple plug and play application.
Nattya, https://sourceforge.net/projects/nattya/, a hex friendly TTY interface is used for debug because the Arduino IDE doesn't support hex RS232 data.