如何使输出适应不断变化的终端宽度



我正在尝试编写一个在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个字符),则可以正常工作。但是,快速减小端子宽度会导致长线包裹,从而破坏输出。有办法解决这个问题吗?

这个问题是指 Blessed 1.9.1之类的东西,它断言它是简化的包装器,以 Cursess 。由于Python的诅咒提供了重新粉刷SIGWINCH的支持,因此断言将继续使用此软件包。实际上,所描述的功能是 terminfo 。诅咒所做的远远超过该页面所示。

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

或者您可以使用诅咒,从getch阅读KEY_RESIZE后进行重新粉刷。

相关内容

  • 没有找到相关文章

最新更新