Python: cursesライブラリの使い方

cursesライブラリの使い方を記載します。

1 import

cursesをインポートします。

import curses

2 初期化処理

  • curses.initscr()でcursesを初期化し、スクリーンを制御するオブジェクトを取得します。
  • curses.noecho()でキーボード入力によるエコーを無効にします。
stdscr = curses.initscr()
curses.noecho()

3 描画処理

  • stdscr.clear()でスクリーンをクリアします。
  • stdscr.addstr()でスクリーンに文字列を追加します。様々な位置に文字列を描画する為に、stdscr.clear()を実行する前に複数回実行することになります。
  • stdscr.clear()でスクリーンを描画します。
stdscr.clear()
stdscr.addstr(y, x, string)
stdscr.refresh()
time.sleep(1)

4 終了処理

初期化処理と逆のことを実行します。これは例外発生時にも実行される必要があります。実行されない場合は端末の表示が崩れ、端末の表示を直すのにstty saneを実行する必要があります。

  • curses.echo()でキーボード入力によるエコーを有効にします。
  • curses.endwin()でcursesを終了します。
curses.echo()
curses.endwin()

5 サンプルコード

キーボードでCtrl + Cが押されるか、10秒経過するまで1秒おきに文字列を描画します。

#!/usr/bin/env python

import curses
import time

if __name__ == "__main__":
    try:
        stdscr = curses.initscr()
        curses.noecho()

        for t in range(0, 10):
            stdscr.clear()
            stdscr.addstr(
                0, 0, 'Program will be terminated after %s seconds' % (10 - t))
            stdscr.refresh()
            time.sleep(1)
    except:
        # Exception by Ctrl + C
        pass
    finally:
        curses.echo()
        curses.endwin()