设置控制台宽度(Windows、Python)

问题描述 投票:0回答:4

我正在使用 Python 开发一个基于文本的小型控制台游戏。因为我使用了一些 ASCII 艺术,所以我必须确保游戏启动后每个人的控制台宽度都相同。谁能告诉我如何设置控制台的宽度和高度? :)

问候

弗洛

python console height width set
4个回答
16
投票

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)

8
投票

最简单的方法是执行mode命令。

例如对于 80x25 窗口:

C:\> mode con: cols=25 lines=80

或者用Python:

subprocess.Popen(["mode", "con:", "cols=25", "lines=80"])

1
投票

Kudo 致 Malte Bublitz,他已经解释了为什么这有效(Python 3+):

os.system(f'mode con: cols={cols} lines={lines}')

0
投票

如果您使用 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
    )
© www.soinside.com 2019 - 2024. All rights reserved.