2010-08-28 16 views
6

¿Hay alguna manera de cambiar la fuente de la consola en Windows en python 2.6?Cambiar la fuente de la consola en Windows

estoy en Windows 7.

es decir:

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

* EDITAR (publicado esta respuesta por accidente)

algo más de información y preguntas:

Miré en la API de Windows: http://msdn.microsoft.com/en-us/library/ms682073%28v=VS.85%29.aspx

que parezca que tiene una función para cambiar la fuente de la consola:

SetCurrentConsoleFontEx 

o al menos obtener información acerca de la fuente actual:

GetCurrentConsoleFont 
GetCurrentConsoleFontEx 

Mi siguiente paso fue encontrar una pitón módulo que puedo usar la API de Windows. Aquí hay una llamada pywin32: http://sourceforge.net/projects/pywin32/

Los módulos reales se importan no son llamados pywin32, pero win32api, win32net, win32console Me di cuenta de esto por conjeturas completa. ¿Dónde está la documentación? a ejecutar en la ayuda ('win32console')

NO muestra las funciones de fuente mencionadas allí, es simplemente que les falta. ¿Me falta algo aquí? ¿Dónde están los documentos? ¿O dónde está un módulo que tiene todas las funciones de consola de la API ...?

+0

ActiveState mantiene una muy buena documentación sobre las extensiones de Windows (algo incompleta, pero mejor que nada). Se puede encontrar aquí: http://docs.activestate.com/activepython/2.6/pywin32/win32console.html – cji

Respuesta

2
Probablemente no

. En la consola de Windows, la fuente es propiedad y está administrada por el programa cmd.exe.

Al igual que con todo, es posible que si realiza una ingeniería inversa de cómo funciona cmd.exe, donde almacena información sobre la fuente, cómo forzarlo a volver a cargarla, etc. es posible que pueda hackearla (en cualquier idioma) pero el sistema no proporciona ninguna funcionalidad de una manera compatible y documentada sobre cómo hacerlo.

-1

Es imposible cambiarlo por una sesión porque la configuración de fuente es de todo el sistema.

Puede cambiar la fuente global cambiando algunos valores en el registro, pero tendrá que reiniciar el sistema.

+0

Esta respuesta no es correcta. –

1

Miré en la API de Windows: http://msdn.microsoft.com/en-us/library/ms682073%28v=VS.85%29.aspx

que parezca que tiene una función para cambiar la fuente de la consola:

SetCurrentConsoleFontEx 

o al menos obtener información acerca de la fuente actual:

GetCurrentConsoleFont 
GetCurrentConsoleFontEx 

Mi siguiente paso fue encontrar un módulo de Python que pueda usar la API de Windows. Aquí hay una llamada pywin32: http://sourceforge.net/projects/pywin32/

Los módulos reales se importan no son llamados pywin32, pero win32api, win32net, win32console Me di cuenta de esto por conjeturas completa. ¿Dónde está la documentación? a ejecutar en la ayuda ('win32console')

NO muestra las funciones de fuente mencionadas allí, es simplemente que les falta. ¿Me falta algo aquí? ¿Dónde están los documentos? ¿O dónde está un módulo que tiene todas las funciones de consola de la API ...?

+0

Está equivocado, existe el método 'PyConsoleScreenBuffer.GetCurrentConsoleFont', así como' SetConsoleFont' (aunque no he comprobado cómo funciona). [Aquí] (http://docs.activestate.com/activepython/2.6/pywin32/win32console.html) son los documentos que puede usar. – cji

0

Bueno, no he profundizado lo suficiente como para poder elegir la fuente por nombre (y dudo que sea posible), pero este código (siempre que pywin32 esté instalado) parece hacer algo gracioso con su consola (debe sea ​​cmd.exe, Console2 no funciona, no sé si funciona con 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 

Documentación dice, que SetConsoleFont "no está documentado en MSDN" ... Pero, ciertamente lo algo con la fuente actual de la consola, por lo que creo que deberías buscar en esta dirección.

Además, pregunta similar: How can I change console font?

+0

SetConsoleFont parece estar cambiando al tamaño de letra, no a la fuente Además, solo puedo ejecutar el código en cmd.exe, intento crear un script.py y tendrá el error – russo

6

Es posible cambiar la fuente de la consola usando ctypes. Un ejemplo de código mínima sería el siguiente:

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)) 

También escribí un ejemplo menos una mínima on my homepage.

+0

Me funcionó a la perfección, ¡muchas gracias! – JeromeJ

+0

** Nota: ** Creo que también debería incluir o vincular esta versión minimalista en su página de inicio. – JeromeJ

0

Si alguien lee esto teniendo el problema de que la configuración de la fuente predeterminada para las solicitudes de PowerShell a Consola de Lucida no funciona, puede haber varias razones (muchas relacionadas solo con esa fuente en particular). He escribió en su blog sobre él aquí: http://www.meadow.se/wordpress/setting-the-font-of-a-powershell-console-to-lucida-console-wont-work/

En resumen, para mí era necesario cambiar configuración regional del sistema del Sueco al Inglés (Estados Unidos) pero hay varias otras posibles soluciones también.

Espero que esto ayude.

Emil

0
from colorama import init 
init() 
from colorama import Fore, Back, Style 
print(Fore.COLORNAME) 
print(Back.COLORNAME) 

Colorname puede ser:
NEGRO, rojo, verde, amarillo, azul, magenta, cian, WHITE, RESET.
RESET restablecerá el color al valor predeterminado.

Copie y pegue este código en su código, y cambie COLORNAME a cualquier color que desee.

Cuestiones relacionadas