我正在使用 Python 开发一个基于文本的小型控制台游戏。因为我使用了一些 ASCII 艺术,所以我必须确保游戏启动后每个人的控制台宽度都相同。谁能告诉我如何设置控制台的宽度和高度? :)
问候
弗洛
a) 检查终端窗口的大小
import os
x = os.get_terminal_size().lines
y = os.get_terminal_size().columns
print(x)
print(y)
b) 更改终端窗口的大小
import os
cmd = 'mode 50,20'
os.system(cmd)
c) 更改终端窗口的颜色
import os
cmd = 'color 5E'
os.system(cmd)
最简单的方法是执行mode命令。
例如对于 80x25 窗口:
C:\> mode con: cols=25 lines=80
或者用Python:
subprocess.Popen(["mode", "con:", "cols=25", "lines=80"])
Kudo 致 Malte Bublitz,他已经解释了为什么这有效(Python 3+):
os.system(f'mode con: cols={cols} lines={lines}')
如果您使用 Windows 终端或 Windows 命令提示符,此函数可通过设置终端/提示窗口的标题、查找该标题,然后使用 Windows API 调整大小来调整窗口大小。
注意:如果另一个窗口共享相同的标题,它可能会先调整该窗口的大小。
import ctypes
import subprocess
import time
def resize_terminal(width: int, height: int, title: str='[Python]') -> None:
"""
Resizes the Windows Terminal after setting the title.
args:
width: new window width in pixels
height: new window height in pixels
title: title of the window
returns:
None
"""
# the title is used to locate the window.
subprocess.run(['title', str(title)], shell=True)
# small delay to allow the title change to propate
# if it cannot find it after 0.25 seconds, give up
for _ in range(10):
hwnd = ctypes.windll.user32.FindWindowW(None, title)
if hwnd:
break
time.sleep(0.025)
else:
print('Could not location window')
return
HWND_TOP = 0 # set the z-order of the terminal to the top
SWP_NOMOVE = 0x0002 # ignores the x and y coords, i.e., resize but don't move.
SWP_NOZORDER = 0x0004 # ignores the changing the zorder.
# Resize the window
ctypes.windll.user32.SetWindowPos(
hwnd,
HWND_TOP,
0,
0,
width,
height,
SWP_NOMOVE + SWP_NOZORDER
)