python - tkinter - 如何为文本设置字体?

标签 python text fonts tkinter widget

我正试图找到在 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 字符,例如中文(但不限于!)常见字体大小的字符在大多数情况下都可用系统?

最佳答案

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

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)

关于python - tkinter - 如何为文本设置字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31918073/

相关文章:

html - 我需要网页中的字体

Python 与 XLSXWRITER : spreadsheet overwritten

python - argparse 改变参数的定义

java - Source Sans Pro 的 TTF 和 OTF 版本在 Swing (Nimbus L&F) 中的显示方式不同

linux - 如何使用 sed 选择性地替换某些行

java - J2ME显示内容

html - 将 Google 字体与 Shadow DOM 结合使用

python - 在图形上绘制椭圆并获取坐标_Python

python - 我可以在python中设置random.randint()函数的条件吗

Python 错误 : "cannot find path specified"