Curses alternative for windows

Question:

Is there any alternative of the curses module for python to use in windows? I looked up in the python documentation, but there its mentioned that its for using in unix. I am not much familiar with these, so is there some way to use curses module in windows or is there some similar module specially for windows?
[I am using Python 3.3]

Asked By: Chandan

||

Answers:

Then you’re out of luck i’m afraid.
There’s no real cross-platform version or port of curses/ncurses, there is a “dialogue” port which works, but it’s limited in capabilities.

Your best bet is to run CygWin or MinGW32, both are, in “loose terms”, a Linux system+terminal emulator which has much of the binaries you need. They can run native Linux/Unix binaries inside the terminal and access your “host” system files at any time, so it’s like patching Windows with a kick-ass terminal with all your goodies from the Linux world.
You’ll still need some basic knowledge of Linux and how the commands etc work, but you’ll figure it out.

Screenshot of MinGW and CygWin

Here’s a Pyglet GUI example:

import pyglet
from pyglet.gl import *

class main (pyglet.window.Window):
    def __init__ (self):
        super(main, self).__init__(800, 600, fullscreen = False)
        self.button_texture = pyglet.image.load('button.png')
        self.button = pyglet.sprite.Sprite(self.button_texture)

        ## --- If you'd like to play sounds:
        #self.sound = pyglet.media.load('music.mp3')
        #self.sound.play()

        self.alive = 1

    def on_draw(self):
        self.render()

    def on_close(self):
        self.alive = 0

    def on_mouse_press(self, x, y, button, modifiers):
        if x > self.button.x and x < (self.button.x + self.button_texture.width):
            if y > self.button.y and y < (self.button.y + self.button_texture.height):
                self.alive = 0

    def on_key_press(self, symbol, modifiers):
        if symbol == 65307: # [ESC]
            self.alive = 0

    def render(self):
        self.clear()
        self.button.draw()
        self.flip()

    def run(self):
        while self.alive == 1:
            self.render()

            # -----------> This is key <----------
            # This is what replaces pyglet.app.run()
            # but is required for the GUI to not freeze
            #
            event = self.dispatch_events()


x = main()
x.run()

Here’s the output of that code:

enter image description here

Answered By: Torxed

I’m happy to report that there’s now a Windows build of Curses available as an extension for Python on Windows, from here. (I didn’t write it, and I don’t know who maintains it.)

You can run the installer, and import curses to get curses running. (Verified on 64-bit Windows 7 and Windows 8.)

@ArtOfWarfare points out that you can install this via Pip with this commend:

pip install http://www.lfd.uci.edu/~gohlke/pythonlibs/xugyqnq9/curses-2.2-cp27-none-win32.whl
Answered By: ashes999

Here’s how to install what ashes999 linked to in their answer via pip:

pip install http://www.lfd.uci.edu/~gohlke/pythonlibs/xugyqnq9/curses-2.2-cp27-none-win32.whl

This should probably be added to PyPI to make installation with pip even easier (so it could be installed by name rather than URL.)

Answered By: ArtOfWarfare

The original question was whether there is an alternative to curses on Windows.

One answer is to use the Win32 console API. You can program this directly in Python using the excellent pywin32 package if you’re already familiar with the console API.

However, I found this too low level for my recent project. I was also less than keen on forcing my users to build/install PDcurses, and besides, I also find curses too low level for a modern OO language like Python too.

I have therefore put together a high level cross-platform API to do all the things most people want from their terminal/console. The asciimatics package will provide most of your input and output needs. If you’re on Linux this is a more human way to program curses. If you’re on Windows, the same class works as is with no external binary dependencies. See below for an example screenshot:

Sample output

There are many other effects and widgets available which you can find in the gallery, but if there’s an extra feature you need, let me know and I’ll see what I can do.

Answered By: Peter Brittain

You may try this one. I once did the Win64-port for this (merged in there). You however need to write your Python code a bit different. This one will redirect all curses calls to the native Python version on UNIX, but call PDCURSES.DLL on Windows (download the DLL separately). It supports unicode as far as I remember:

http://sourceforge.net/projects/pyunicurses/

Answered By: Flo

The official doc proposes the following (here at the bottom of the paragraph):

The Windows version of Python doesn’t include the curses module.
A ported version called UniCurses is available. You could also
try the Console module written by Fredrik Lundh, which doesn’t
use the same API as curses but provides cursor-addressable text output
and full support for mouse and keyboard input.

Answered By: jeromej

This is not a new solution, just an edit to a previous one.

In case the pip command is giving a 404 error you can try to download the packet from http://www.lfd.uci.edu/~gohlke/pythonlibs/#curses
and then write something like

pip install C:..packetPath..curses-2.2-cp35-none-win_amd64.whl
Answered By: Lossan
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.