属性BOLD在我的curses中似乎不生效

6 投票
2 回答
7554 浏览
提问于 2025-04-11 19:48

我用的是这样的代码:screen.addstr(text, color_pair(1) | A_BOLD),但是好像不太管用……

不过,A_REVERSE和其他所有属性都能正常工作!

实际上,我想打印一些白色的东西,但用COLOR_WHITE打印出来却是灰色的……经过一番搜索,似乎是灰色加上BOLD效果才会显示出来!

任何帮助都非常感谢。

2 个回答

5

我试了这个:screen.addstr(text, curses.color_pair(1) | curses.A_BOLD),结果成功了!

所以只需要加上curses.,就能解决问题。记得一开始要用:import curses

6

这里有一段示例代码(Python 2.6,Linux系统):

#!/usr/bin/env python
from itertools import cycle
import curses, contextlib, time

@contextlib.contextmanager
def curses_screen():
    """Contextmanager's version of curses.wrapper()."""
    try:
        stdscr=curses.initscr()
        curses.noecho()
        curses.cbreak()
        stdscr.keypad(1)
        try: curses.start_color()
        except: pass

        yield stdscr
    finally:
        stdscr.keypad(0)
        curses.echo()
        curses.nocbreak()
        curses.endwin()

if __name__=="__main__":
    with curses_screen() as stdscr:
        c = curses.A_BOLD
        if curses.has_colors():
            curses.init_pair(1, curses.COLOR_GREEN, curses.COLOR_BLACK)
            c |= curses.color_pair(1)

        curses.curs_set(0) # make cursor invisible

        y, x = stdscr.getmaxyx()
        for col in cycle((c, curses.A_BOLD)):
            stdscr.erase()
            stdscr.addstr(y//2, x//2, 'abc', col)
            stdscr.refresh()
            time.sleep(1)

看起来一切都正常。

撰写回答