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
            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.0.4.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

clean_menu-0.0.4-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: clean_menu-0.0.4.tar.gz
  • Upload date:
  • Size: 6.4 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.0.4.tar.gz
Algorithm Hash digest
SHA256 7e235c0b105305a5b51ebf94215580681d831c85b0a7a988e09a79f43f11329d
MD5 b50f5782dffe53c8f4698ca893457bdc
BLAKE2b-256 8308b55d965ad0a0268343959b3a97121ae06bdadc25090c736ceca5191313e6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: clean_menu-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 6.1 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.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 93ce9e477141b28c5cc0ab76a2a5cd21abbec32f0074da2b4358a44642f18830
MD5 cadf1ebf62baabc44d146ddc60b9e91b
BLAKE2b-256 4ad14f3629f13ca60b1acd9586a833b0d94928e24cc0fa640e00250473e82e26

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