我正在尝试编写一个在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
后进行重新粉刷。