【问题标题】:tkinter - How to set font for Text?tkinter - 如何为文本设置字体?
【发布时间】: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


【解决方案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)

【讨论】:

  • 谢谢布莱恩,它成功了!我错误地假设,tk 小部件不能使用 ttk 类的对象,因为 ttk 较新。元组“技巧”也很值得了解。
  • @SashaPachev:感谢您的编辑!一年半以来,这个错误都被忽视了!
  • 您似乎缺少 Fontroot 参数。
  • @AlwaysLearning:Font 类不采用根参数,但我更新了我的答案,希望更清楚您需要在创建字体之前创建根窗口。
  • 只有前两个条目的元组也可以。示例:font=("Times New Roman", 12)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 2023-04-06
相关资源
最近更新 更多