我试图编写一个在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个字符),则此方法正常。但是,快速减小端子宽度会导致长线缠绕,从而破坏输出。有没有办法解决这个问题?
答案 0 :(得分:0)
问题涉及类似blessed 1.9.1的问题,它声称它是curses的简化包装器。由于Python curses为SIGWINCH
上的重新绘制提供了支持,因此断言将继续使用此包。实际上,所描述的功能适用于 terminfo 。 curses比那个页面显示的要多得多。
要使用祝福处理SIGWINCH
,您必须在脚本中捕获该内容并触发重新绘制屏幕。 Height and Width中显示的示例应该足以开始。
或者您可以使用curses,在从KEY_RESIZE
阅读getch
后进行重新绘制。