如何在 Asciimatics 下检测屏幕大小调整
How to detect screen resize under Asciimatics
这个小片段会在屏幕右下角显示 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()
工作正常。
当我调整 window 大小时,屏幕上的所有内容都被清空了。循环内的 screen.has_resized()
永远不会被触发。但是程序仍然是 运行ning 因为 'Q' 会正确退出。
Python 在 Linux VM 上 运行ning,我正在使用 MacOS (TERM="xterm-256color"
) 中的 ssh/iTerm2 访问 Linux虚拟机。
请求协助
此时,我需要进行完整性检查。
我不知道我的代码、我的终端程序是否有问题,或者 curses 是否没有使用调整大小信号编译。 MacOS 上的 iTerm2 可能没问题,因为当我在另一个 window 中 运行 vim 并调整 iTerm2 window 的大小时,vim 确实识别了调整大小。
有没有人让他们的系统在 asciimatics 中检测到 screen.has_resize()
?如果是这样,请分享您的代码片段并分享您的环境,以便我可以准确缩小我做错的范围。
谢谢。
这是一个微妙的问题...屏幕将保持其尺寸,直到您重新创建它。您的代码正在被触发,但将相同的内容打印到双缓冲区,因此不会在刷新时更新。
您只需允许调整屏幕对象的大小。例如...
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()
这个小片段会在屏幕右下角显示 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()
工作正常。
当我调整 window 大小时,屏幕上的所有内容都被清空了。循环内的 screen.has_resized()
永远不会被触发。但是程序仍然是 运行ning 因为 'Q' 会正确退出。
Python 在 Linux VM 上 运行ning,我正在使用 MacOS (TERM="xterm-256color"
) 中的 ssh/iTerm2 访问 Linux虚拟机。
请求协助
此时,我需要进行完整性检查。
我不知道我的代码、我的终端程序是否有问题,或者 curses 是否没有使用调整大小信号编译。 MacOS 上的 iTerm2 可能没问题,因为当我在另一个 window 中 运行 vim 并调整 iTerm2 window 的大小时,vim 确实识别了调整大小。
有没有人让他们的系统在 asciimatics 中检测到 screen.has_resize()
?如果是这样,请分享您的代码片段并分享您的环境,以便我可以准确缩小我做错的范围。
谢谢。
这是一个微妙的问题...屏幕将保持其尺寸,直到您重新创建它。您的代码正在被触发,但将相同的内容打印到双缓冲区,因此不会在刷新时更新。
您只需允许调整屏幕对象的大小。例如...
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()