在python控制台应用程序中更改字体和大小的最干净的方法是什么?

时间:2019-06-10 14:51:53

标签: python console ctypes

我正在为Windows的“ BackTerminal”窗口开发终端应用程序,它的字体和窗口大小与普通/默认控制台不同。

我有一个方法可以做到这一点-并且它可以工作-但问题是它在打开时会迅速将控制台大小更改2-3倍,并且需要一秒钟的时间〜1秒。听起来有些挑剔,但我希望它更加整洁。

我当前的方法是这样的:

1)更改控制台大小

os.system("MODE 100,25")

2)更改缓冲区大小以允许滚动

os.system('powershell.exe -command "& {$pshost = Get-Host;$pswindow = $pshost.UI.RawUI;$newsize = $pswindow.BufferSize;$newsize.height = 9999;$pswindow.buffersize = $newsize;}"') #enables scrolling

3)使用我在这里找到的方法更改字体:Change console font in Windows

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 = 15
font.dwFontSize.X = 13
font.dwFontSize.Y = 14
font.FontFamily = 54
font.FontWeight = 400
font.FaceName = "Consolas"
handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
ctypes.windll.kernel32.SetCurrentConsoleFontEx(
        handle, ctypes.c_long(False), ctypes.pointer(font))

理想情况下,我希望可以快速更改所有这些内容而又无需重复调整窗口大小。我认为这可能与ctypes有关。我该怎么办?

0 个答案:

没有答案