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)