调整curses终端大小不改变程序窗口大小
我在使用Windows系统,而curses模块在这个系统上并不是原生支持的,所以我用的是为Python 3.2准备的Windows curses模块,链接在这里。
我的目标是调整终端的大小,现在它的大小是25行 x 80列。我首先尝试了curses.resizeterm(lines, cols)
这个命令,但在Windows curses模块中找不到这个命令(用hasattr(curses, 'resizeterm')
检查后返回的是false)。所以我又看了一个叫unicurses的替代模块,它也是为Windows准备的,但这个模块连调整大小的命令都没有。
于是我继续查资料,了解到环境变量'LINES'
和'COLS'
,通过os.environ
设置这两个变量应该可以调整终端的大小。确实可以,虽然只是部分有效。终端的大小确实变了,但显示终端的Windows程序的大小还是保持在25 x 80不变。我确认这两个变量确实被修改了,还写了一个小程序在左上角显示它们的值。此外,box()
函数确实在屏幕周围画了一个边框,就好像这些变量已经被改变一样。
所以,有人能解释一下要么是1) 如何调整“Windows窗口”的大小以匹配终端,或者2) 如何让resizeterm()
在我的Python安装中工作吗?我程序的相关代码和它的截图附在下面。
import random, sys, math, curses, os
from curses import *
curses.use_env(True)
os.environ['LINES'] = "80"
os.environ['COLS'] = "60"
stdscr = curses.initscr()
curses.noecho()
curses.cbreak()
curses.start_color()
stdscr.keypad(1)
curses.curs_set(0)
LINES, COLS = stdscr.getmaxyx()
1 个回答
0
这段代码可能会对你有帮助:
import curses
screen = curses.initscr()
# Check if screen was re-sized (True or False)
resize = curses.is_term_resized(y, x)
# Action in loop if resize is True:
if resize is True:
y, x = screen.getmaxyx()
screen.clear()
curses.resizeterm(y, x)
screen.refresh()