tkinter - Как установить шрифт для текста?

Я пытаюсь найти лучший шрифт для отображения символов UTF-8 в tk.Text.

Я позволяю python печатать все фамилии, известные tk, используя этот код:

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

и все известные имена для использования с помощью этого кода:

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

однако вывод семейств-это список шрифтов, имена которых состоят из одного или нескольких слов. Легко установить те с одним словом, как это:

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

но когда я пытаюсь то же самое имена шрифтов, которые состоят из нескольких слов, я получаю сообщение об ошибке:

_tkinter.TclError: expected integer but got <second word of the family name>

Я не могу его стиль, так как это TK, а не виджет ttk, поэтому, к сожалению, я не могу сделать:

style.configure('My.TText', fontsize=12, font='<family name with multiple words>')

Я также попытался просто удалить пробелы фамилии такой:

text.configure(font='fangsongti')

но это заставляет tkinter использовать некоторый резервный шрифт. Я проверил его, введя имя:

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

и в результате в печать точные строки я вошел в семью имя. Таким образом, он просто принимает все, кроме нескольких словесных имен.

Я нашел некоторые шрифты, которые выглядят нормально, но только в определенных размерах, и я не уверен, что они доступны в большинстве систем:

# helvetica 12
# gothic 13
# mincho 13

как можно установить шрифты с именами, состоящими из нескольких слов? Если я не могу, какой шрифт, имеющий одно адресное имя, подходит для отображения символов utf-8, таких как, например, китайский (но не исключительно!) символы на общих размерах шрифта и is доступно в большинстве систем?

1 ответов


при указании шрифтов таким образом, использовать кортеж:

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

еще лучше, вы можете создать свои собственные объекты шрифта и указать атрибуты по имени. Примечание: перед созданием объекта шрифта необходимо сначала создать корневое окно.

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

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

myFont.configure(size=14)