【发布时间】:2017-05-11 04:15:40
【问题描述】:
我正在尝试使用“雾霾”字符 - ACS_CKBOARD - 作为背景,并带有自定义的前景色和背景色。
这似乎工作正常,但是当我调用 addstr 在背景顶部显示文本时,文本出现乱码。它似乎是“替代字符”的选择,而不是我的“你好,世界!”,当然除了一些正常的字母会显示出来。
这是一个小屏幕截图:
我假设有什么东西卡在了诅咒里面。有谁知道我如何才能在此背景下显示正确的文本?
下面是一些产生该行为的代码:
import curses
import locale
def main(scr):
curses.init_color(2, 650, 407, 160) # brown
curses.init_color(6, 149, 113, 78) # tan
curses.init_pair(1, 2, 6)
scr.bkgd(curses.ACS_CKBOARD, curses.color_pair(1))
scr.clear()
scr.addstr(10, 0, 'Hello, world!', curses.color_pair(0))
scr.getch()
if __name__ == "__main__":
locale.setlocale(locale.LC_ALL, '')
curses.wrapper(main)
FWIW:我在 Mac 上使用 iTerm2,Python 版本 3.5.3。如果我在终端中运行相同的代码,我会得到类似的结果,但颜色错误:
更新:
阅读 Thomas Dickey 的回答后,我尝试实施他的建议。我尝试设置bkgd,然后设置clear 和erase,然后再调用设置bkgd。那行不通-我得到了没有背景字符的颜色。查看bkgd 的文档,它确实指定了“然后将更改应用到该窗口中的每个字符位置”, 这就是正确的!
然后我找到了window.bkgdset(char[, attr]),它不会立即将其设置应用于每个字符位置。相反,它只适用于新绘制的位。使用该函数,我将代码修改如下:
curses.init_pair(1, 2, 6)
scr.bkgd(curses.ACS_CKBOARD, curses.color_pair(1))
scr.erase()
scr.bkgdset(' ', curses.color_pair(1))
scr.addstr(10, 0, 'Hello, world!', curses.color_pair(0))
这行得通!这是显示结果的屏幕截图:
感谢 Thomas,关于在绘制后重置背景的建议!
【问题讨论】:
标签: python python-3.x ncurses curses python-curses