Python tkinter-如何设置文本的字体?

Python tkinter-如何设置文本的字体?,python,text,fonts,tkinter,widget,Python,Text,Fonts,Tkinter,Widget,我正在努力寻找在tk.Text中显示utf-8字符的最佳字体 我让python使用以下代码打印tk已知的所有家族名称: print(font.families(root=self.parent)) print(font.names(root=self.parent)) 以及使用此代码的所有已知用途名称: print(font.families(root=self.parent)) print(font.names(root=self.parent)) 但是,这些族的输出是字体列表,其名称

我正在努力寻找在
tk.Text
中显示utf-8字符的最佳字体

我让python使用以下代码打印tk已知的所有家族名称:

print(font.families(root=self.parent))
print(font.names(root=self.parent))
以及使用此代码的所有已知用途名称:

print(font.families(root=self.parent))
print(font.names(root=self.parent))
但是,这些族的输出是字体列表,其名称由一个或多个单词组成。很容易用一个词来设置这些词:

text = tk.Text(master=self.frame)
text.configure(font='helvetica 12')
text.configure(font='fangsongti')
但当我尝试使用由多个单词组成的字体名称时,我得到了一个错误:

_tkinter.TclError: expected integer but got <second word of the family name>
但这会导致tkinter使用一些备用字体。我检查了它,输入了如下名称:

text.configure(font='fangsongtisdngfjsbrgkrkjgbkl')
print(text.cget('font'))
这会打印出我作为姓氏输入的字符串。所以它只接受一切,除了多个单词的名字

我发现了一些字体,看起来不错,但只有特定大小,我不确定它们是否在大多数系统上可用:

# helvetica 12
# gothic 13
# mincho 13

如何设置名称由多个单词组成的字体?如果我不能,哪种具有单字名称的字体适合在常用字体大小上显示utf-8字符,例如中文字符(但不限于!),并且在大多数系统上可用?

以这种方式指定字体时,请使用元组:

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)

如果我没有错的话,
font
参数需要一个font对象!因此,只需使用
font
类创建字体对象,然后将引用分配给小部件的
font
字段。@nbro:它也可以使用元组。@BryanOakley是的,我不确定该选项;)font参数可以采用字体对象、命名字体的名称、字体描述符字符串或元组。Font(Font=…)是一种很好的机制,可以“规范化”不同的字体表示,如描述符、元组、字体对象、字体名称等。谢谢Bryan,它成功了!我错误地假设tk小部件不能使用ttk类的对象,因为ttk是较新的。元组“把戏”也很好了解。@SashaPachev:谢谢你的编辑!那只虫子一年半都没被注意到!您似乎缺少
Font
root
参数@AlwaysLearning:
Font
类没有根参数,但我已经更新了我的答案,希望能更清楚地表明,在创建字体之前,您需要创建一个根窗口。只有前两个条目的元组也可以工作。示例:
font=(“泰晤士报新罗马”,12)