这个小片段将在屏幕右下角显示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)Situation
对print_dims()的第一次调用运行良好。
当我调整窗口的大小时,屏幕上的所有东西都会被清除掉。循环中的screen.has_resized()从未被触发。但是程序仍然在运行,因为'Q‘将正确退出。
Python运行在Linux上,我使用来自MacOS (TERM="xterm-256color")的ssh/iTerm2访问Linux。
请求协助
现在,我需要一个健全的检查。
我不知道我的代码、我的终端程序是否出了问题,或者诅咒是否没有用调整大小的信号来编译。iTerm2 on MacOS可能是可以的,因为当我在另一个窗口中运行vim并调整iTerm2窗口的大小时,vim确实识别了调整大小。
有没有人得到他们的系统来检测screen.has_resize()在腹水中?如果是这样的话,请分享你的片段和分享你的环境,这样我就可以缩小我做错了什么。
谢谢。
发布于 2022-04-07 20:22:22
这是个微妙的问题。屏幕将保持其尺寸,直到您重新创建它。您的代码正在被触发,但是将相同的内容打印到双缓冲区,因此不会在刷新时更新。
您只需允许调整屏幕对象的大小即可。例如..。
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()https://stackoverflow.com/questions/71748769
复制相似问题