Изменить шрифт консоли в Windows - PullRequest
6 голосов
/ 29 августа 2010

Есть ли способ изменить шрифт консоли в Windows в 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

Мой следующий шаг - найти модуль Python, в котором я мог бы использовать Windows API. Вот тот, который называется pywin32: http://sourceforge.net/projects/pywin32/

Фактически импортируемые вами модули называются не pywin32, а win32api, win32net, win32console. Я понял это с помощью полной догадки. Где документация? запуск по справке ('win32console')

НЕ показывает упомянутые функции шрифта, просто их не хватает. Я что-то здесь упускаю? Где документы? Или где находится модуль, который имеет все функции консоли API ...?

Ответы [ 7 ]

9 голосов
/ 19 декабря 2012

Можно изменить шрифт консоли, используя 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))

Я также написал менее минимальный пример на своей домашней странице .

2 голосов
/ 29 августа 2010

Наверное, нет.В консоли Windows шрифт является свойством и управляется программой cmd.exe.

Как и все, возможно, если вы перепроектируете, как работает cmd.exe, где хранится информация о шрифте, какпринудительная перезагрузка и т. д. вы можете взломать его (на любом языке), но система не предоставляет поддерживаемых и документированных способов, как это сделать.

2 голосов
/ 29 августа 2010

Вы можете проверить http://pypi.python.org/pypi/colorama

1 голос
/ 29 августа 2010

Я посмотрел в Windows API: http://msdn.microsoft.com/en-us/library/ms682073%28v=VS.85%29.aspx

Похоже, у него есть функция для изменения шрифта консоли:

SetCurrentConsoleFontEx

или хотя бы получение информации о текущем шрифте:

GetCurrentConsoleFont
GetCurrentConsoleFontEx

Мой следующий шаг - найти модуль Python, в котором я мог бы использовать Windows API. Вот тот, который называется pywin32: http://sourceforge.net/projects/pywin32/

Фактически импортируемые вами модули называются не pywin32, а win32api, win32net, win32console. Я понял это с помощью полной догадки. Где документация? запуск по справке ('win32console')

НЕ показывает упомянутые функции шрифтов, просто их просто не хватает. Я что-то здесь упускаю? Где документы? Или где находится модуль, который имеет все функции консоли API ...?

0 голосов
/ 13 октября 2014

Если кто-то прочитает это, столкнувшись с проблемой, что установка шрифта по умолчанию для PowerShell предлагает Lucida Console не работает, может быть несколько причин (многие из которых связаны только с этим конкретным шрифтом). Я написал об этом здесь: http://www.meadow.se/wordpress/setting-the-font-of-a-powershell-console-to-lucida-console-wont-work/

Короче говоря, для меня было необходимо изменить локаль системы со шведского на английский (США) , но есть и несколько других возможных решений.

Надеюсь, это поможет.

Эмиль

0 голосов
/ 29 августа 2010

Ну, я недостаточно глубоко копал, чтобы выбрать шрифт по имени (и я сомневаюсь, что это возможно), но этот код (при условии, что установлен pywin32), кажется, делает что-то смешное с его консолью (должен быть cmd.exe, Console2 не работает, я не знаю, работает ли он с powershell):

[C:Users/cji]|1> import win32console
[C:Users/cji]|2> win32console.PyConsoleScreenBufferType( win32console.GetStdHandle( win32console.STD_OUTPUT_HANDLE )  )
         <2> <PyConsoleScreenBuffer:19>
[C:Users/cji]|3> p = _
[C:Users/cji]|6> p.SetConsoleFont( 1 )
[C:Users/cji]|7> p.SetConsoleFont( 2 )
# and so on, to:
[C:Users/cji]|12> p.SetConsoleFont( 11 ) #this is Lucida Console, if I see correctly

Документация гласит, что SetConsoleFont "не задокументировано в MSDN" ... Но, безусловно, он делает что-то с текущим консольным шрифтом, поэтому я думаю, что вы должны искать в этом направлении.

Также похожий вопрос: Как мне изменить шрифт консоли?

0 голосов
/ 29 августа 2010

Невозможно изменить его для одного сеанса, потому что настройка шрифта общесистемная.

Вы можете изменить глобальный шрифт, изменив некоторые значения в реестре, но вам придется перезагрузить систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...