have you checked the python curses howto already? I have written a curses wrapper for one of my projects. Maybe it can help showing what steps you need. I've been using curses a lot for my own projects so feel free to ask me if there's something you want to know. The python curses library is mostly just a wrapper around calls to the ncurses system library. Documentation for that library or ports in other languages will likely help you in python too. Answer from troido on reddit.com
🌐
Python documentation
docs.python.org › 3 › howto › curses.html
Curses Programming with Python — Python 3.14.3 documentation
Author, A.M. Kuchling, Eric S. Raymond,, Release, 2.04,. Abstract: This document describes how to use the curses extension module to control text-mode displays. What is curses?: The curses library ...
🌐
Python
docs.python.org › 3 › library › curses.html
curses — Terminal handling for character-cell displays
Source code: Lib/curses The curses module provides an interface to the curses library, the de-facto standard for portable advanced terminal handling. While curses is most widely used in the Unix en...
Discussions

Any Python/Curses resources?
have you checked the python curses howto already? I have written a curses wrapper for one of my projects. Maybe it can help showing what steps you need. I've been using curses a lot for my own projects so feel free to ask me if there's something you want to know. The python curses library is mostly just a wrapper around calls to the ncurses system library. Documentation for that library or ports in other languages will likely help you in python too. More on reddit.com
🌐 r/roguelikedev
9
21
May 10, 2021
windows - What is needed for curses in Python 3.4 on Windows7? - Stack Overflow
I have a running Python 2.7/3.4 installation on my Windows 7 (x64) machine. I would like to test curses on Windows. Curses is installed but not working: >>> import curses Traceback (most More on stackoverflow.com
🌐 stackoverflow.com
user interface - Are there any toolkit libraries for curses with Python bindings? - Stack Overflow
Urwid is the best library to work with curses and python that I know. More on stackoverflow.com
🌐 stackoverflow.com
Does python have a curses lib that looks THIS good?
Well it turns out my search abilities lacked on my first attempt. I just found this same question asked already. https://www.reddit.com/r/Python/comments/5tjyag/are_there_any_equivalents_to_blessed_a_js_cli_ui/ More on reddit.com
🌐 r/Python
2
12
February 2, 2018
🌐
W3Schools
w3schools.com › python › ref_module_curses.asp
Python curses Module
Python Examples Python Compiler ... Certificate Python Training ... The curses module provides terminal handling for character-cell displays, supporting text UIs....
🌐
Reddit
reddit.com › r/roguelikedev › any python/curses resources?
r/roguelikedev on Reddit: Any Python/Curses resources?
May 10, 2021 -

I know curses is generally disliked around here, and tcod is recommended. I've tried to get tcod working on two operating systems though, and couldn't get it to work on either. I haven't tried really hard though, because curses really appeals to me, both by being the traditional library used for most of the roguelikes I played growing up, and also because of the small footprint when it comes to system resources.

There aren't many Python/Curses resources out there. I've found a few non-roguelike-specific tutorials on youtube, the Rogue Detective source, and this non-functional algorithm. I'm pretty sure this is enough for me to cobble together something playable. I'm just curious whether there are better methods I could be using.

🌐
Substack
codedrome.substack.com › p › an-introduction-to-curses-in-python
An Introduction to curses in Python - CodeDrome - Substack
May 20, 2025 - In a few of my projects I have used various ANSI terminal codes to manipulate terminal output, specifically moving the cursor around and changing text colours. These codes are often cryptic, can be cumbersome if used extensively, and cannot be relied upon to work across different platforms. A better solution is to use Python's implementation of the venerable curses library, and in this post I will provide a short introduction to what I consider its core functionalities: moving the cursor around and printing in different colours.
🌐
PyPI
pypi.org › project › windows-curses
windows-curses · PyPI
Adds support for the standard Python curses module on Windows. Based on these wheels.
      » pip install windows-curses
    
Published   Mar 31, 2026
Version   2.4.2
🌐
DZone
dzone.com › coding › languages › python curses, part 1: drawing with text
Python curses, Part 1: Drawing With Text
April 21, 2025 - Discover how to draw with text using the Python curses library. Learn setup, key considerations and how to create basic framework for your application.
Find elsewhere
🌐
GitHub
github.com › zephyrproject-rtos › windows-curses
GitHub - zephyrproject-rtos/windows-curses: Windows Curses Python module · GitHub
The curses module is in the Python standard library, but is not available on Windows.
Starred by 213 users
Forked by 39 users
Languages   C
🌐
GitHub
gist.github.com › claymcleod › b670285f334acd56ad1c
Python curses example · GitHub
import curses def draw_menu(stdscr): k = 0 kw = 0 kk = "" height, width = stdscr.getmaxyx() min_x_keystr = width - 1 min_x_wkeystr = width - 1 min_x_kkeystr = width - 1 cursor_x = 0 cursor_y = 0 # Clear and refresh the screen for a blank canvas stdscr.clear() stdscr.refresh() # Start colors in curses curses.start_color() curses.init_pair(1, curses.COLOR_CYAN, curses.COLOR_BLACK) curses.init_pair(2, curses.COLOR_RED, curses.COLOR_BLACK) curses.init_pair(3, curses.COLOR_BLACK, curses.COLOR_WHITE) # Loop where k is the last character pressed while (k != ord('q')): # Initialization #stdscr.clear()
🌐
DevDungeon
devdungeon.com › content › curses-programming-python
Curses Programming in Python | DevDungeon
June 10, 2019 - If you write a command-line application, you should consider using curses to implement functionality you could not otherwise do with standard console output. The text editor nano is a good example of a ncurses application. We will look at how to use this library in Python.
🌐
Gnosis
gnosis.cx › publish › programming › charming_python_6.html
CHARMING PYTHON #6 -- Curses programming in Python: Tips for Beginners --
Python is available for almost every computer platform you might find yourself working on, and has strong portability between platforms. curses (usually ncurses in practice) is a library whose routines give a programmer a terminal-independent method of controlling character screens.
🌐
Hyperskill
hyperskill.org › blog › post › introduction-to-the-curses-library-in-python-text-based-interfaces
Introduction to the curses Library in Python: Text-Based Interfaces | Hyperskill Blog
October 24, 2024 - `curses` is a simple yet effective library for creating text-based UIs. It has some quirks, like throwing errors if the text is out of bounds. Some functionality may depend on your system or even the terminal you use.
🌐
OMZ Software
omz-software.com › editorial › docs › howto › curses.html
Curses Programming with Python — Editorial Documentation
The Console module provides cursor-addressable text output, plus full support for mouse and keyboard input, and is available from http://effbot.org/zone/console-index.htm. Thy Python module is a fairly simple wrapper over the C functions provided by curses; if you’re already familiar with curses programming in C, it’s really easy to transfer that knowledge to Python.
🌐
DZone
dzone.com › coding › languages › python curses, part 3: working with windowed content
Python curses, Part 3: Working With Windowed Content
April 23, 2025 - Explore window customization, content updates, window size management, and CPU optimization with Python's curses module for efficient terminal interfaces.
Top answer
1 of 3
12

Urwid is the best library to work with curses and python that I know.

Altenatively, you might find also interesting snack (newt-based library).

For more information, please have a look at this question.

2 of 3
9

npyscreen

Npyscreen is a Python widget library and application framework for programming terminal or console applications. It is built on top of ncurses, which is part of the standard library.

The focus of this library is to provide a rapid way to develop console applications. In general, adding a control to the screen requires only one line of code.

This framework should be powerful enough to create everything from quick, simple programs to complex, multi-screen applications.

#!/usr/bin/env python
# encoding: utf-8

import npyscreen
class TestApp(npyscreen.NPSApp):
    def main(self):
        # These lines create the form and populate it with widgets.
        # A fairly complex screen in only 8 or so lines of code - a line for each control.
        F  = npyscreen.Form(name = "Welcome to Npyscreen",)
        t  = F.add(npyscreen.TitleText, name = "Text:",)
        fn = F.add(npyscreen.TitleFilename, name = "Filename:")
        fn2 = F.add(npyscreen.TitleFilenameCombo, name="Filename2:")
        dt = F.add(npyscreen.TitleDateCombo, name = "Date:")
        s  = F.add(npyscreen.TitleSlider, out_of=12, name = "Slider")
        ml = F.add(npyscreen.MultiLineEdit,
               value = """try typing here!\nMutiline text, press ^R to reformat.\n""",
               max_height=5, rely=9)
        ms = F.add(npyscreen.TitleSelectOne, max_height=4, value = [1,], name="Pick One",
                values = ["Option1","Option2","Option3"], scroll_exit=True)
        ms2= F.add(npyscreen.TitleMultiSelect, max_height =-2, value = [1,], name="Pick Several",
                values = ["Option1","Option2","Option3"], scroll_exit=True)

        # This lets the user interact with the Form.
        F.edit()

        print(ms.get_selected_objects())

if __name__ == "__main__":
    App = TestApp()
    App.run()
🌐
GitHub
github.com › mezcel › python-curses
GitHub - mezcel/python-curses: A cli scripture Rosary written in python using curses (Python, curses, windows-curses) · GitHub
A Python CLI/terminal application which cycles through a scriptural Rosary.
Starred by 10 users
Forked by 3 users
Languages   Python