如何在Ascimatics下检测屏幕大小



这个小片段将在屏幕右下角显示h x w

from asciimatics.screen import Screen
import time
def print_dims(screen):
(h, w) = screen.dimensions
screen.print_at("%3d x %3d" % (h, w), w - 12, h - 1, Screen.COLOUR_BLUE, Screen.A_NORMAL)
def demo(screen):
print_dims(screen)
while True:
if screen.has_resized():   # never triggered
print_dims(screen)
ev = screen.get_key()
if ev in (ord('Q'), ord('q')):
return
time.sleep(0.1)
screen.refresh()
Screen.wrapper(demo)

情况

print_dims()的第一次调用工作正常。

当我调整窗口的大小时,屏幕上的所有内容都会被屏蔽掉。循环内的screen.has_resized()永远不会被触发。但程序仍在运行,因为"Q"将正确退出。

Python在Linux虚拟机上运行,我使用MacOS(TERM="xterm-256color"(中的ssh/iTerm2访问Linux虚拟机。

请求援助

在这一点上,我需要一个健全的检查。

我不知道我的代码、终端程序是否出了问题,或者curses是否没有用调整大小信号编译。MacOS上的iTerm2可能还可以,因为当我在另一个窗口中运行vim并调整iTerm2窗口的大小时,vim确实可以识别大小调整。

有人用他们的系统检测腹水中的screen.has_resize()吗?如果是这样的话,请分享你的片段和你的环境,这样我就可以准确地缩小我做错了什么。

谢谢。

这是一个微妙的问题。。。屏幕将保持其尺寸,直到您重新创建它。您的代码被触发,但将相同的内容打印到双缓冲区,因此在刷新时不会更新。

您只需要允许调整Screen对象的大小。例如

from asciimatics.screen import Screen
import time
import sys
def print_dims(screen):
(h, w) = screen.dimensions
screen.print_at("%3d x %3d" % (h, w), w - 12, h - 1, Screen.COLOUR_BLUE, Screen.A_NORMAL)
def demo(screen):
print_dims(screen)
while True:
if screen.has_resized():
return
print_dims(screen)
ev = screen.get_key()
if ev in (ord('Q'), ord('q')):
sys.exit(0)
time.sleep(0.1)
screen.refresh()
def main():
while True:
Screen.wrapper(demo)
main()

相关内容

  • 没有找到相关文章

最新更新