调整curses终端大小不改变程序窗口大小

1 投票
1 回答
3908 浏览
提问于 2025-04-17 16:35

我在使用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()

撰写回答