Skip to main content

A simple console menu system using curses

Project description

Build StatusDocumentation StatusCoverage Status


A simple Python menu-based GUI system on the terminal using curses. Perfect for those times when you need a GUI, but don’t want the overhead or learning curve of a full-fledged GUI framework. However, it’s also flexible enough to do cool stuff like on-the-fly changing of menus and is extensible to a large variety of uses.



Tested on Python 3.8+ pypy and pypy3.

The curses library comes bundled with python on Linux and MacOS. Windows users can visit and get a third-party build for your platform and Python version.

Then just run

pip install curses-menu


It’s designed to be pretty simple to use. Here’s an example

menu = CursesMenu("Root Menu", "Root Menu Subtitle")
item1 = MenuItem("Basic item that does nothing", menu)
function_item = FunctionItem("FunctionItem, get input", input, ["Enter an input: "])
command_item = CommandItem(
    "CommandItem that opens another menu",
    f"python {__file__}",

submenu = CursesMenu.make_selection_menu([f"item{x}" for x in range(1, 20)])
submenu_item = SubmenuItem("Long Selection SubMenu", submenu=submenu, menu=menu)

submenu_2 = CursesMenu("Submenu Title", "Submenu subtitle")
function_item_2 = FunctionItem("Fun item", input, ["Enter an input"])
item2 = MenuItem("Another Item")
submenu_item_2 = SubmenuItem("Short Submenu", submenu=submenu_2, menu=menu)


_ = menu.join()

Testing Information

Currently the platforms I’m manually testing on are MacOS in iTerm2 on zsh with and without TMUX and Windows 10with both powersehll and cmd.exe in and out of Windows Terminal. If a bug pops up on another configuration, no promises that I’ll be able to reproduce it.

Download files

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

Source Distribution

curses_menu-0.8.1.tar.gz (25.7 kB view hashes)

Uploaded source

Built Distribution

curses_menu-0.8.1-py3-none-any.whl (39.0 kB view hashes)

Uploaded py3

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