【发布时间】:2015-11-02 06:43:00
【问题描述】:
我正在努力寻找在 tk.Text 中显示 utf-8 字符的最佳字体。
我让 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 字符,例如常见字体大小的中文(但不限于!)字符 和 在大多数情况下都可用系统?
【问题讨论】:
-
font参数,如果我没记错的话,需要一个Font对象!因此,只需使用Font类创建字体对象,然后将引用分配给小部件的font字段。 -
@nbro:它也可以接受一个元组。
-
@BryanOakley 是的,我不确定那个选项;)
-
字体参数可以采用字体对象、命名字体的名称、字体描述符字符串或元组。 tkFont.Font(font=...) 是一种很好的机制,可以“规范化”不同的字体表示,如描述符、元组、字体对象、字体名称等。
标签: python text fonts tkinter widget