Python 当bkgd char为curses.ACS\u电路板时,文本出现损坏
我试图使用一个“haze”字符作为背景,带有自定义的前景色和背景色 这看起来还可以,但是当我调用Python 当bkgd char为curses.ACS\u电路板时,文本出现损坏,python,python-3.x,ncurses,curses,python-curses,Python,Python 3.x,Ncurses,Curses,Python Curses,我试图使用一个“haze”字符作为背景,带有自定义的前景色和背景色 这看起来还可以,但是当我调用addstr在背景上显示文本时,文本是乱码。这似乎是一个“替代字符”的选择,以取代我的“你好,世界!”,当然,除了一些正常的字母显示通过 下面是一个小屏幕截图: 我想诅咒里面一定有东西卡住了。有人知道如何在这种背景下显示正确的文本吗 下面是一些生成行为的代码: import curses import locale def main(scr): curses.init_color(2, 6
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。如果在Terminal中运行相同的代码,则会得到颜色错误的类似结果:
更新:
在阅读了托马斯·迪基的答案后,我试图实现他的建议。我尝试设置bkgd
,然后是clear
和erase
,然后是另一个设置bkgd
的调用。这不起作用-我得到的颜色没有背景字符。查看bkgd
的文档,它确实指定了“然后将更改应用到该窗口中的每个字符位置”,所以这是正确的
然后我发现,它不会立即将其设置应用于每个角色的位置。相反,它只适用于新绘制的位。使用该函数,我对代码进行了如下修改:
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))
这就行了!以下是显示结果的屏幕截图:
托马斯,谢谢你建议在画画后重新设置背景 背景字符(您已使用
scr.bkgd
设置)是视频属性、颜色对和字符的组合,与添加到屏幕上的其他字符合并,例如通过scr.addstr
值得一提的是,X/opencurses在中记录了该功能
备用字符集特性是这些视频属性之一,如X/Open Curses所述:
指定的属性,或与窗口属性关联
如果你不想那样,你可以
- 临时设置背景,擦除窗口(填充背景)并重置背景,而不使用备用字符集,例如
- 使用不同的方法向屏幕添加字符。底层curses库直接传递视频属性(无合并)。但它似乎不是Python绑定的一部分(在中没有类似的内容)。的attr参数可能指的是window属性(使用类似的函数设置)(在X/Open curses中,为“window color”)
scr.bkgd
调用是解决问题的方法
scr.bkgd(curses.ACS_NORMAL, curses.color_pair(1))