这个小片段将在屏幕右下角显示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()