Example code - GrayAi0/ConsoleMenu GitHub Wiki

from ConsoleMenu.menu import Menu
from ConsoleMenu.items.natives import *
import ConsoleMenu.settings as pkg_settings

characters = {}

def tms(status):
    print(status)

def getValuesForStyle(key):
    if key in ["minimal_width", "minimal_height"]:
        return [i for i in range(pkg_settings.default_menu_settings[key], pkg_settings.default_menu_settings[key] * 4)]
    
    if key in ['left-character', 'right-character']:
        isright = key == 'right-character'
        return [
            '|',
            ':',
            '!',
            ('[' if not isright else ']'),
            ('(' if not isright else ')'),
            ('{' if not isright else '}'),
            ('<' if not isright else '>'),
#            ...

        ]

    if key in ['top-character', 'middle-character', 'bottom-character']:
        return [
            '-',
            '_',
            '+',
            '=',
            'ـ', # This could be not work
            '~',
#            ...
        ]

def exit():
    menu.running = False


menu = Menu('Menu', (0,0))



stylemenu = SubMenu("Styles", None, "Style Menu")

for key, value in zip(pkg_settings.default_menu_settings.keys(), pkg_settings.default_menu_settings.values()):
    
    if key in ['maximal_width', 'maximal_height']:
        continue

    def style_change(key):
        chrs = characters[key]
        chrs['index'] += 1
        if chrs['index'] > len(chrs['values'])-1:
            chrs['index'] = 0
        
        menu.settings[key] = chrs['values'][chrs['index']]
        stylemenu.settings[key] = chrs['values'][chrs['index']]
        stylemenu._rendermenu()
    

    values = getValuesForStyle(key)
    characters[key] = {
        "value": value,
        "index": 0 ,
        "values": values
    }
    
    vkey = key.replace('-', ' ').replace('_', ' ')
    vkey = ''.join([vkey[0].upper(), *list(vkey)[1:]])

    stylemenu.appendItem(Button(vkey, style_change, call_params=(key,)))

menu.appendItem(CheckBox('Toggel Menu style', tms, True))
menu.appendItem(stylemenu) # sub-menu fixed
menu.appendItem(Button('Exit', exit))

menu.run_pool()