0

我正在尝试编写一个在 Python 控制台中运行时会生成一个简单小部件的函数。这个小部件应该是终端大小感知的。显示小部件后,我将等待用户的键盘输入并根据类型调整内容。我现在遇到的困难是如何在用户调整终端大小时使该小部件调整其显示。这是我现在拥有的代码的简化版本:

def test():
    import blessed
    import signal

    def draw():
        n = term.width - 3
        print("+" + "=" * n + "+" + term.clear_eol)
        print("|" + " " * (n//2 - 2) + 
              "TEST" + " " * (n - n//2 - 2) + "|" + term.clear_eol)
        print("+" + "=" * n + "+" + term.clear_eol)

    def redraw(_, __):
        print(term.move_up * 3, end="")
        draw()

    term = blessed.Terminal()
    draw()
    signal.signal(signal.SIGWINCH, redraw)
    with term.cbreak():
        term.inkey()

如果用户扩展终端,或者如果他缩小终端但非常缓慢(一次 1 个字符),这可以正常工作。但是,快速减小终端宽度会导致长线换行,从而破坏输出。有没有办法解决这个问题?

4

1 回答 1

0

这个问题是指像祝福1.9.1之类的东西,它声称它是一个简化的curses包装器。由于 Python curses 支持在 上重新绘制SIGWINCH,因此断言将延续到此包。实际上,描述的功能是针对terminfo的。curses 比该页面显示的要多得多。

要处理SIGWINCH使用blessed,您必须在脚本中捕获它并触发重新绘制屏幕。高度和宽度中显示的示例应该足以开始。

或者你可以使用 curses,你可以在阅读KEY_RESIZEfrom之后重新绘制getch

于 2017-03-13T21:11:49.680 回答