欢迎访问宙启技术站
智能推送

Python中curses库的基本用法

发布时间:2024-01-03 19:50:59

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_cursesteardown_cursesmain

- 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 库的更多功能,你可以阅读官方文档或搜索其他相关资源。