tkinter – ¿Cómo establecer la fuente para el texto?

Estoy tratando de encontrar la mejor fuente para mostrar los caracteres utf-8 en un tk.Text .

Dejo que Python imprima todos los nombres de familia conocidos con este código:

 print(font.families(root=self.parent)) 

y todos los nombres conocidos para usos que utilizan este código:

 print(font.names(root=self.parent)) 

Sin embargo, la salida de las familias es una lista de fonts, que tienen nombres que constan de una o más palabras. Es fácil configurar los que tienen una palabra como esta:

 text = tk.Text(master=self.frame) text.configure(font='helvetica 12') 

Pero cuando bash lo mismo con los nombres de las fonts, que constan de varias palabras, aparece un error:

 _tkinter.TclError: expected integer but got  

No puedo personalizarlo, ya que es un widget tk y no ttk, así que desafortunadamente no puedo:

 style.configure('My.TText', fontsize=12, font='') 

También traté de eliminar simplemente los espacios en blanco del nombre de la familia de esta manera:

 text.configure(font='fangsongti') 

Pero eso hace que tkinter use alguna fuente alternativa. Lo comprobé ingresando un nombre como:

 text.configure(font='fangsongtisdngfjsbrgkrkjgbkl') print(text.cget('font')) 

Y esto da como resultado la impresión de la cadena exacta que ingresé como nombre de familia. Así que simplemente acepta todo, excepto varios nombres redactados.

Encontré algunas fonts, que se ven bien, pero solo en ciertos tamaños y no estoy seguro de que estén disponibles en la mayoría de los sistemas:

 # helvetica 12 # gothic 13 # mincho 13 

¿Cómo puedo configurar fonts con nombres que consistan en varias palabras? Si no puedo, ¿qué fuente, con un nombre de una sola palabra, es adecuada para mostrar caracteres utf-8 como, por ejemplo, caracteres chinos (pero no exclusivamente) en tamaños de fuente comunes y está disponible en la mayoría de los sistemas?

Cuando especifique fonts de esta manera, use una tupla:

 text.configure(font=("Times New Roman", 12, "bold")) 

Aún mejor, puede crear sus propios objetos de fuente personalizados y especificar los atributos por nombre. Nota: antes de poder crear un objeto de fuente, primero debe crear una ventana raíz.

 # python 2 # import Tkinter as tk # from tkFont import Font # python 3 import tkinter as tk from tkinter.font import Font root = tk.Tk() text = tk.Text(root) ... myFont = Font(family="Times New Roman", size=12) text.configure(font=myFont) 

La ventaja de crear sus propias fonts es que más tarde puede cambiar cualquier atributo de la fuente, y cada widget que use esa fuente se actualizará automáticamente.

 myFont.configure(size=14)