Win10控制台如何放大单行print输出的文字大小
Windows 10 原生控制台(传统conhost环境)的字号是全局配置项,原生不支持单独给某一行输出设置独立字号,做控制台游戏要实现大标题效果,有两个实测可用的方案:
方案1:ASCII艺术字实现大标题(最推荐,全环境兼容)
这是控制台游戏最通用的实现方式,不需要修改系统控制台配置,靠字符拼接模拟大字号效果,不管是传统cmd、PowerShell还是新版Windows Terminal都能正常显示,不会影响其他行文本的大小。
- 先安装ASCII艺术字生成库,执行命令:
pip install pyfiglet - 替换原有的标题打印代码即可:
from pyfiglet import Figlet # 可以修改font参数换大字风格,常用的可选值有slant、block、banner、doom custom_font = Figlet(font='slant') print(custom_font.renderText("PENGUIN ADVENTURE"))
打印完标题后,其余内容正常用print()输出即可,全部是默认字号,不会出现全局字号被改动的问题。
方案2:调用Win32 API临时切换全局字号(仅适配传统控制台)
如果不想用ASCII艺术字,可以在打印标题前临时调大控制台全局字号,标题打印完成后立刻切回原字号,因为切换速度极快,视觉上只会看到标题是大尺寸。
可直接复用的代码如下:
import ctypes # 获取控制台输出句柄,提前存储原有字体配置 STD_OUT_HANDLE = -11 console_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUT_HANDLE) FONT_INFO_SIZE = 84 # 对应Windows CONSOLE_FONT_INFOEX结构体的固定大小 original_font = ctypes.create_string_buffer(FONT_INFO_SIZE) ctypes.cast(original_font, ctypes.POINTER(ctypes.c_ulong))[0] = FONT_INFO_SIZE ctypes.windll.kernel32.GetCurrentConsoleFontEx(console_handle, False, original_font) def switch_font_size(width: int, height: int): """临时修改控制台字号""" temp_font = ctypes.create_string_buffer(FONT_INFO_SIZE) ctypes.cast(temp_font, ctypes.POINTER(ctypes.c_ulong))[0] = FONT_INFO_SIZE ctypes.windll.kernel32.GetCurrentConsoleFontEx(console_handle, False, temp_font) # 写入新的字号宽高 ctypes.cast(temp_font, ctypes.POINTER(ctypes.c_ulong))[2] = width ctypes.cast(temp_font, ctypes.POINTER(ctypes.c_ulong))[3] = height ctypes.windll.kernel32.SetCurrentConsoleFontEx(console_handle, False, temp_font) # 打印标题时切大字号,宽高数值可以根据需要自己调整 switch_font_size(16, 32) print("PENGUIN ADVENTURE") # 打印完成立刻切回原字号 ctypes.windll.kernel32.SetCurrentConsoleFontEx(console_handle, False, original_font) # 后续正常输出内容,均为默认字号 print("按任意键开始游戏")
注意:这个方案在新版Windows Terminal中会失效,因为WT的字体渲染机制和传统conhost不同,不会响应这类Win32控制台字体修改API,优先选方案1兼容性更好。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

