【发布时间】:2018-05-25 22:27:42
【问题描述】:
我的 Debian Sid 笔记本上有两个 Python 安装,⑴ 系统的 Python (v.2.7) 和一些实用程序包(包括Tkinter)和⑵ Anaconda 的 Python 3。
很容易看出两种 Python 发行版有哪些(嗯,这里有多少...)字体。
Python 2
>>> from Tkinter import Tk
>>> from tkFont import families
>>> Tk(); available = families() ### Tk() is needed to have a running tcl interpreter
<Tkinter.Tk instance at 0x7f977bcbfb90>
>>> len(available)
3011
Python 3
>>> from tkinter import Tk
>>> from tkinter.font import families
>>> Tk() ; available = families()
<tkinter.Tk object .>
>>> len(available)
68
在我看来,Anaconda 的 tkinter 只查看基本的 X 字体随发行版提供请参阅下面的编辑。
你知道一个程序,或者
- 让 Anaconda 的
tkinter知道系统字体(首选替代方案)或 - 在 Anaconda 的树中安装一些字体以便
tkinter可以使用它们?
tia
编辑 Anaconda 可用的字体确实是系统字体,但只有xfontsel 知道的字体,即可以使用xset 操作的字体路径中的字体。
我尝试了以下
$ cd ~/.fonts ; mkfontscale ; mkfontdir ; xset fp+ `pwd`
和xfontsel 显示了大约 30 多个字体系列。通过 Python 3 检查,我确认只有两个 字体系列被添加到可用字体列表中(即 'go' 和 'gomono' — 没有 'consolas' 等)并生成标签
...
r = Tk() ; Label(r, text="Go Mono", font=('gomono', 24)).pack()
使用 Python 2 和 Python 3 在这两种情况下都成功了,但是 Debian 的 Python 显示了很好的抗锯齿文本,而另一个是(粗略的)位图再现。
所以,从某种意义上说,我已经部分回答了我的问题,但是
- 并非
xfontsel所示的每个字体系列都被tkinter采用 - 即使对于少数被认可的人来说,演绎也有太多不足之处...
我想阅读一个更好、更有用的答案。
【问题讨论】:
-
我怀疑您的问题类似于以下问题中描述的内容:Path to Linux Fonts in Python3 and tkinter
-
@PicoutputCls 我明白了,这些问题至少可以说是相似的......但是我要留下我的问题,因为我觉得问题标题更切题并且可以吸引更多答案,你怎么看?
-
同意。我只是引用了这篇文章,因为我认为它可能会帮助您或其他人找到问题的解决方案。
-
有FONTCONFIG_PATH/FONTCONFIG_FILE 环境变量吗?你能检查一下
'FONTCONFIG_PATH' in os.environ之类的东西吗? -
@CommonSense 我已经检查过了,没有合适的(显然是
fontconfig相关的)环境变量。
标签: python tkinter fonts anaconda fontconfig