{tT} kinter工作链接到Tk / Tcl解释器,松散地说,它包含在几个DLL中,特别是图形库是libtk6.0.so.
tkinter没有看到的大多数额外字体由Freetype库管理,而Anaconda的libtk6.0.so不是针对Freetype构建的…
$ldd /usr/lib/x86_64-linux-gnu/libtk8.6.so | grep freetype
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f0a24597000)
$ldd miniconda3/lib/libtk8.6.so | grep freetype
$
我尝试过以下可怕的事情
$mv lib/miniconda3/lib/libtk8.6.so lib/miniconda3/lib/libtk8.6.sav
$ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so lib/miniconda3/lib/libtk8.6.so
$ipython
Python 3.6.3 |Anaconda, Inc.| (default, Nov 20 2017, 20:41:42)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from tkinter import Tk, Label ; from tkinter.font import families
In [2]: r = Tk() ; a = families() ; len(a)
Out[2]: 328
In [3]: r=Tk() ; Label(r, text="Constantia", font=("Constantia", 60)).pack()
In [4]: r.mainloop()
最后的想法.
>替换DLL不是一个干净的解决方案.
>字体不完全相同.肯定Anaconda有自己的Fontconfig子系统,可能扫描的目录不同,但我对字体数量的差异没有正确的理解.
>正确的行动方案是说服Anaconda,Inc.建立针对Freetype的libtk,但我不知道如何向他们报告,例如,如果我转到https://www.anaconda.com/search/issues,我看到的是关于分发的信息文章列表.
更新
W.r.to第3点,我通过a github issue Anaconda Inc.联系,我被告知
No we cannot do this. When building our software we need python built very early, well before anything graphical gets built. Adding Freetype as a dep for tkinter causes a cycle in the build graph and we can no longer build the distro.
Why not use something more modern than tkinter anyway?
???????????????????????????????????????????????????— Ray Donnelly (aka mingwandroid)