Skip to main content

Minimal library fot making menus within the console

Project description

Clean Menu

Table of content

Installation

You can install the package by running the following command : python3 -m pip install --upgrade clean-menu

Note

Please note that the package is currently in beta version and may encounter bugs or unexpected behaviours for which I am not responsible.

Known issues :

Linux :

  • The keys are captured but not intercepted
  • navigate in the menu browse your terminal history
  • when you press enter to validate, it can trigger one of your previous commands

I tried the same fix than windows but I haven't tested it yet.

Windows :

  • To disable key propagation, I set up a filter using the win32_event_filter kwarg
  • It will block arrows up and down, enter, and space (only if you use the space key to validate) These issues are all related, and a safe way to use it would be to override the default validation_key and set it to space.

MacOS : I actually don't have a mac to test it, but I think it won't work as expected, because filters are not the same as windows. Furthermore, keyboard monitoring requires elevated (root) privileges.

Use

Create an instance

Simply import the Menu object from the package into your script and start use it.

from clean_menu import Menu

menu = Menu(title,  # menu title
            options,  # list of options
            subtilte,  # menu subtitle
            subtitle_color=None,  # subtitle color
            exit_text="Exit",  # exit text
            exit_function=sys.exit,  # exit function called when
            art_title=True,  # enable/disable ascii art title
            title_font="",  # ascii art title font
            default_pointer_index=0,  # default option index in option list
            margin="    ",  # characters before options, better result when longer than pointer
            title_color="red",  # title color
            text_color="white",  # color for not pointed options
            pointer_style=None,  # pointer style, if None, no pointer
            pointer_color="green",  # pointer color
            pointed_text_color="white",  # pointed option text color
            pointed_background_color="None",  # pointed option background color
            validation_key="enter",  # key to validate an option
            )

so the following code :

from clean_menu import Menu

menu = Menu("Test",
            ["Option 1", "Option 2", "Option 3"],
            title_font="rounded",
            title_color="blue",
            margin="        ",
            pointer_style=["==>", "<=="],
            pointer_color="red",
            pointed_background_color="white",
            pointed_text_color="green",
            exit_text="Quit me forever...",
            text_color="magenta",
            validation_key="enter",
            )

will render this :

Click to see the image (redirection)

Bind actions to options:

You can attach a function or method to each action in the menu, except for the exit, which is handled by the parameter exit_function. To do so, you just have to call the bind() method, with the index of the option and the function as parameters.

menu.bind(0, lambda: print("Option 1"))
menu.bind(1, lambda: print("Option 2"))
menu.bind(2, lambda: print("Option 3"))

in case the given index is not handled, you will get an error like this :

menu.bind(3, lambda: print("Option 4"))
=======================================
Bind Error: Index out of range
List of available options to assign functions :
0 : Option 1                                    # you will see all the options
1 : Option 2                                    # available for binding and their
2 : Option 3                                    # index to specify as parameter
Traceback (most recent call last):
  File "c:\Users\mathe\Documents\code\cleanMenu\clean-menu\main.py", line 158, in <module>
    example()
  File "c:\Users\mathe\Documents\code\cleanMenu\clean-menu\main.py", line 152, in example
    menu.bind(3, lambda: print("Option 4"))
  File "c:\Users\mathe\Documents\code\cleanMenu\clean-menu\main.py", line 114, in bind
    raise IndexError
IndexError

Use the menu

You have to options to use the menu :

  • You can bind functions to options and let the menu execute them with the run method
  • you can just execute the menu screen to get the index of the selected option

examples :

menu.run() # and that's pretty much all you need to do...
index = menu.get_index() # will return the index of the selected option	
print(menu.options[index]) # should display the option you selected

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clean_menu-0.1.2.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

clean_menu-0.1.2-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file clean_menu-0.1.2.tar.gz.

File metadata

  • Download URL: clean_menu-0.1.2.tar.gz
  • Upload date:
  • Size: 6.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.10.8 Windows/10

File hashes

Hashes for clean_menu-0.1.2.tar.gz
Algorithm Hash digest
SHA256 c464368745133798f9e76a8f61b594281392e9aa1d87dfdc32831a3bdf3b362b
MD5 843fc362bc57ca2d61e32f630a2de62a
BLAKE2b-256 68835505a01454ee86ad154f893ee36853ebc29d7a8d4e729a6412f38f385b01

See more details on using hashes here.

File details

Details for the file clean_menu-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: clean_menu-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.10.8 Windows/10

File hashes

Hashes for clean_menu-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 36d7469828216d41ec0a7a66a14141b26171c5b3691449dec7bf48d1e6f626c9
MD5 c35dfbb429f0f8d0a46f3bb5040cee0b
BLAKE2b-256 9592af669c7be7807632a40c2a688f8c00005493878f4a963820f808079b059e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page