The comments on this project have been very helpful in two ways. The comments have been useful in themselves and the presence of some interest in the project inspires me to do a bit more work on it. My plans are listed below:
1. Do a short video of the menu functioning. I will do this but and have made a start. I come to realise that I am pretty challenged in the video department and it is not quite as simple as I thought to make even a passable video.
2. Make the two main driver events (on_scroll, and on_click) much more explicit. These two events and all function and class definitions should be factored out into their own module so that it does not depend on any particular hardware. This should make the hardware module cleaner.
3. Having made cleaner separation of hardware code and menu code I want to make a "pseudo-hardware" version for Jupyter that uses widgets in a notebook. This means that menus could be be built and tested in Jupyter before running on actual hardware.
I am hoping that the method defining menus wont change.
3. John suggested in a comment that there should be some indicators of the role and/or state of menu-items. In order to keep it to simple text we could do this with some special characters or small strings. I think a lot of this could be done just by convention when we define the menus. For instance a submenu could be shown as "> Submenu", instead of just "Submenu" or an an information item could be written as "# Information" rather than just "Information". These would give the user some indication of what the menu item does. Obviously other markers could be used. Instead of convention would could make the various classes add a specific indicator to their caption on construction.