是诅咒窗口.insnstr在python3中出现宽字符?

2024-09-29 21:54:10 发布

您现在位置:Python中文网/ 问答频道 /正文

使用python3的ncurses绑定打印宽字符时,使用窗口.insnstr. 下面是重现问题的代码:

import curses


def main(window):
    window.insnstr(0, 0, "insnstr", 80)
    window.insnstr(1, 0, "赵启明          XXX", 80)
    window.insnstr(2, 0, "001122          XXX", 80)
    window.insnstr(3, 0, "赵启明          XXX", 80)
    window.insnstr(4, 0, "001122          XXX", 80)
    window.addnstr(6, 0, "addnstr", 80)
    window.addnstr(7, 0, "赵启明          XXX", 80)
    window.addnstr(8, 0, "001122          XXX", 80)
    window.addnstr(9, 0, "赵启明          XXX", 80)
    window.addnstr(10, 0, "001122          XXX", 80)
    window.addnstr(11, 0, "Press any key to exit.", 80)
    window.refresh()
    window.get_wch()


if __name__ == "__main__":
    curses.wrapper(main)

使用tmux、Xterm和st,我得到以下输出:

insnstr
赵启明       XXX
001122          XXX
赵启明       XXX
001122          XXX

addnstr
赵启明          XXX
001122          XXX
赵启明          XXX
001122          XXX
Press any key to exit.

我希望两个街区的路线是一样的。有趣的是,如果我用任何其他字符替换空格,对齐方式是一致的:

insnstr
赵启明----------XXX
001122----------XXX
赵启明----------XXX
001122----------XXX

addnstr
赵启明----------XXX
001122----------XXX
赵启明----------XXX
001122----------XXX
Press any key to exit.

根据您的浏览器字体,数字可能对齐,也可能不对齐;请参阅此屏幕截图以查看输出在终端仿真器中的外观:

screenshot of terminal

这是ncurses库、Python库实现中的一个bug,还是我误解了curses函数应该如何工作?你知道吗


Tags: tokey代码mainexitanywindow字符
1条回答
网友
1楼 · 发布于 2024-09-29 21:54:10

它看起来像ncurses库中的一个bug:addstr风格的使用频率远远高于insert/delete操作,ncurses必须做一些特殊的簿记来跟踪双宽度字符。你知道吗

这在patch 6.0.20160220中是固定的,它最终将出现在您使用的任何包中。你知道吗

相关问题 更多 >

    热门问题