Make Anaconda's tkinter aware of system fonts or install new fonts for Anaconda

前端 未结 2 596
生来不讨喜
生来不讨喜 2020-12-06 05:35

I have two Python installations on my Debian Sid notebook, ⑴ the system\'s Python (v.2.7) with a little bunch of utility packages (including Tkinter) and ⑵ Anac

2条回答
  •  隐瞒了意图╮
    2020-12-06 06:23

    {tT}kinter works linking to a Tk/Tcl interpreter that, loosely speaking, is contained in a couple of DLL, in particular the graphical library is libtk6.0.so.

    Most of the extra fonts not seen by tkinter are managed by the Freetype library and Anaconda's libtk6.0.so is not built against 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
    $
    

    I've tried the following, horrible thing

    $ 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()
    

    Final thoughts.

    1. Substituting the DLL is not a clean solution.
    2. The fonts are not exactly the same. For sure Anaconda has its own Fontconfig subsystem and possibly the directories that are scanned are different, but I have not a correct understanding of the discrepancy in the number of fonts.
    3. The correct course of action is to persuade Anaconda, Inc. to build libtk against Freetype, but I don't know how to report to them, e.g., if I go to https://www.anaconda.com/search/issues what I see is a list of informational articles on the distribution.

    Update

    W.r.to point 3, I contacted via a github issue Anaconda Inc. and I was told

    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)

提交回复
热议问题