更改Windows中的控制台字体

6 投票
7 回答
21479 浏览
提问于 2025-04-16 03:26

有没有办法在Windows 7的Python 2.6中更改控制台的字体?

我现在用的是Windows 7。

比如说:

import os
os.console.font = 'Lucida Console'

一些更多的信息和问题:

我查了一下Windows的API:

http://msdn.microsoft.com/en-us/library/ms682073%28v=VS.85%29.aspx

看起来里面有一个可以更改控制台字体的功能:

SetCurrentConsoleFontEx

或者至少可以获取当前字体的信息:

GetCurrentConsoleFont
GetCurrentConsoleFontEx

接下来,我想找一个可以使用Windows API的Python模块。这里有一个叫pywin32的:

http://sourceforge.net/projects/pywin32/

实际上你导入的模块并不叫pywin32,而是win32api、win32net和win32console。我是凭猜测才弄明白的。文档在哪里呢?

运行help('win32console')后,居然没有显示提到的字体功能,完全缺失了。这是我漏掉什么了吗?文档在哪里?或者有没有一个模块包含所有API的控制台功能呢……

7 个回答

1

可能不行。在Windows的命令行中,字体是由cmd.exe这个程序管理的。

就像其他事情一样,如果你逆向工程研究cmd.exe是怎么工作的,看看它是在哪里存储字体信息的,或者怎么强制它重新加载字体等等,或许你能找到一些黑科技(用任何语言都可以),但系统并没有提供官方支持和文档说明的功能来做到这一点。

2

你可以去看看这个链接:http://pypi.python.org/pypi/colorama

14

可以通过使用 ctypes 来改变控制台的字体。下面是一个简单的代码示例:

import ctypes

LF_FACESIZE = 32
STD_OUTPUT_HANDLE = -11

class COORD(ctypes.Structure):
    _fields_ = [("X", ctypes.c_short), ("Y", ctypes.c_short)]

class CONSOLE_FONT_INFOEX(ctypes.Structure):
    _fields_ = [("cbSize", ctypes.c_ulong),
                ("nFont", ctypes.c_ulong),
                ("dwFontSize", COORD),
                ("FontFamily", ctypes.c_uint),
                ("FontWeight", ctypes.c_uint),
                ("FaceName", ctypes.c_wchar * LF_FACESIZE)]
    
font = CONSOLE_FONT_INFOEX()
font.cbSize = ctypes.sizeof(CONSOLE_FONT_INFOEX)
font.nFont = 12
font.dwFontSize.X = 11
font.dwFontSize.Y = 18
font.FontFamily = 54
font.FontWeight = 400
font.FaceName = "Lucida Console"

handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
ctypes.windll.kernel32.SetCurrentConsoleFontEx(
        handle, ctypes.c_long(False), ctypes.pointer(font))

我还在我的个人主页上写了一个更详细的例子,你可以去看看

撰写回答