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