Python 中的 curses 模块封装了 C 语言的 curses。curses 是一个能够提供基于文本终端窗口功能的动态库。它可以创建和管理一个窗口,使用8中不同的颜色,提供鼠标以及键盘支持。与 Tkinter 不同的是 curses 是基于终端的。

curses 支持 Unix/Linux 系统,目前不支持 Windows

基本语法

  • initscr()
    初始化 curses, 在任何代码执行钱都需要先初始化 curses。
  • noecho()
    关闭屏幕回显,即读取字符仅在适当的环境下输出。相对应的是 echo()
  • cbreak()
    程序立即反应,即不需要按回车。相对应的是 nocbreak()
  • keypad(bool)
    键盘模式,即读取键盘输出。keypad(1) 为开启,keypad(0) 为关闭。
  • endwin()
    恢复默认设置,即回到终端之前的状态。
  • newwin(height, width, begin_y, begin_x)
    在原有程序中创建新窗口,类似与分屏。
  • addscr(y, x, str, attr)
    显示文本,若没有坐标,字符将显示在上一次操作完的位置;若没有属性,字符将使用默认的属性显示。

    属性:可使用 color_pair(int) 方法获取一对颜色。使用 init_pair(n, f, b) 修改颜色对 n,使用 f 为前景色,使用 b 为背景色。

    curses 内置了8种基本颜色:COLOR_RED, COLOR_BLACK, COLOR_GREEN, COLOR_YELLOW, COLOR_BULE, COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE。使用颜色前需要调用 start_color()

  • getch()
    获取输入一个字符串,返回一个 0~255 之间的整数,表示字符的 ASCII 值。
  • refresh()
    刷新窗口,变更窗口后需要调用

基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import curses

# 初始化 curses
screen = curses.initscr()
# 开启键盘模式
screen.keypad(1)
# 关闭屏幕回显
curses.noecho()

# 开启颜色设置,并设置颜色对
curses.start_color()
curses.init_pair(1, curses.COLOR_CYAN, curses.COLOR_RED)
curses.init_pair(2, curses.COLOR_BLUE, curses.COLOR_WHITE)

# 显示文本
screen.addstr(12, 25, "Hello, Ahonn!")
while True:
# 读取键盘输入
key = screen.getch()

# 当输入 c 时,显示 you input 'c', 使用颜色对 1
if key == ord('c'):
screen.addstr(12, 25, "you input 'c' ", curses.color_pair(1))
# 当输入 b 时,显示 you input 'b',使用颜色对 2
elif key == ord('b'):
screen.addstr(12, 25, "you input 'b' ", curses.color_pair(2))
# 当输入 q 时退出循环
elif key == ord('q'):
break
# 刷新窗口
screen.refresh()
# 退出到终端之前的状态
curses.endwin()