Python中curses库的基本用法
Curses 是一个用于创建文本用户界面(TUI)的 Python 库。它提供了在命令行界面中创建窗口、添加文本、处理输入事件等功能。在本文中,我们将介绍 curses 库的基本用法,并提供一些使用示例。
首先,我们需要安装 curses 库。在大多数 Linux 发行版上,curses 库已经预装好了。如果你使用的是 Windows 或 macOS,你可以使用 pip 命令来安装:
pip install windows-curses
在导入 curses 库之前,我们需要先导入 sys 库,并将 curses 设置为使用正确的终端类型。这可以通过调用 setupterm 函数来完成:
import sys
import curses
def setup_curses():
# 初始化 curses
stdscr = curses.initscr()
# 禁止回显输入字符
curses.noecho()
# 开启功能键
stdscr.keypad(True)
return stdscr
def teardown_curses(stdscr):
# 恢复终端设置
curses.nocbreak()
stdscr.keypad(False)
curses.echo()
curses.endwin()
def main(stdscr):
# 开始编写你的 curses 程序
stdscr.addstr(0, 0, "Hello, Curses!")
stdscr.refresh()
stdscr.getch()
if __name__ == "__main__":
stdscr = setup_curses()
try:
main(stdscr)
finally:
teardown_curses(stdscr)
上述代码首先导入 sys 和 curses 库,然后定义了三个函数:setup_curses,teardown_curses 和 main。
- setup_curses 函数初始化了 curses 库,并设置了一些默认参数,例如禁止回显输入字符,开启功能键等。它返回一个 stdscr 对象,该对象将用于所有后续的 curses 操作。
- teardown_curses 函数用于恢复终端的设置,并关闭 curses 库。
- main 函数是你的 curses 程序的主体部分。在这个示例中,我们通过调用 addstr 函数在屏幕的 (0, 0) 坐标处添加了一条文本,然后调用 refresh 函数刷新屏幕,并使用 getch 函数等待用户按下任意键。
注意,在使用 curses 库之前,需要通过调用 setup_curses 来初始化 curses,并在使用完毕后调用 teardown_curses 来恢复终端的设置。这是因为 curses 库会修改终端的设置,如果没有恢复的话,可能会导致无法正常输入和输出字符。
此外,curses 还提供了很多其他的功能,例如创建窗口、设置颜色、处理鼠标事件等。下面是一个使用 curses 创建窗口的示例:
import sys
import curses
def setup_curses():
stdscr = curses.initscr()
curses.noecho()
stdscr.keypad(True)
return stdscr
def teardown_curses(stdscr):
curses.nocbreak()
stdscr.keypad(False)
curses.echo()
curses.endwin()
def main(stdscr):
# 创建一个新的窗口
win = curses.newwin(10, 30, 0, 0)
# 向窗口中添加文本
win.addstr(0, 0, "Hello, Curses!")
win.refresh()
stdscr.getch()
if __name__ == "__main__":
stdscr = setup_curses()
try:
main(stdscr)
finally:
teardown_curses(stdscr)
在上述代码中,我们使用 newwin 函数创建了一个大小为 10x30 的窗口,并使用 addstr 函数向窗口中的 (0, 0) 坐标处添加了一条文本。然后,我们通过调用 refresh 函数刷新窗口的显示,并使用 getch 函数等待用户按下任意键。
除了创建窗口,curses 还提供了设置颜色的功能。下面是一个使用 curses 设置颜色的示例:
import sys
import curses
def setup_curses():
stdscr = curses.initscr()
curses.noecho()
stdscr.keypad(True)
# 开启颜色支持
curses.start_color()
return stdscr
def teardown_curses(stdscr):
curses.nocbreak()
stdscr.keypad(False)
curses.echo()
curses.endwin()
def main(stdscr):
# 检查终端是否支持颜色
if not curses.has_colors():
sys.exit("Error: Terminal does not support colors")
# 初始化颜色对
curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE)
curses.init_pair(2, curses.COLOR_YELLOW, curses.COLOR_BLUE)
stdscr.addstr(0, 0, "Hello, Curses!", curses.color_pair(1))
stdscr.refresh()
stdscr.getch()
if __name__ == "__main__":
stdscr = setup_curses()
try:
main(stdscr)
finally:
teardown_curses(stdscr)
在上述代码中,我们首先通过调用 start_color 函数开启了颜色支持。然后,使用 init_pair 函数初始化了两个颜色对,编号分别为 1 和 2。最后,当调用 addstr 函数时,我们可以传入一个颜色对作为参数,以指定文本的前景色和背景色。
以上是 curses 库的基本用法和一些使用示例。curses 库有很多其他功能和函数,我们只是提供了一些基本的用法。如果你想深入了解 curses 库的更多功能,你可以阅读官方文档或搜索其他相关资源。
