Python 的 IDLE 编辑器是否使用后备字体?

Does Python's IDLE editor use a fallback font?

我正在寻找一种支持 IDLE 似乎具有的一系列特殊字符的字体。配置 IDLE 菜单似乎声称它正在使用 Courier New。但是,当我检查 Courier New 的内容时,它不支持 IDLE 以某种方式显示的字符。 IDLE 使用 Courier New 的修改版本还是使用某种后备字体?

这些是 IDLE 显示的字符,其中一些不在 Courier New 中:(例如 )

[("⌐■","■"),("°","°"),("⇀","↼"),("´•","•`"),("´","`"),("`","´"),("ó","ò"),("ò","ó"),("⸌","⸍"),("Ƹ̵̡","Ʒ"),("ᗒ","ᗕ"),("⟃","⟄"),("⪧","⪦"),
("⪦","⪧"),("⪩","⪨"),("⪨","⪩"),("⪰","⪯"),("⫑","⫒"),("⨴","⨵"),("⩿","⪀"),("⩾","⩽"),("⩺","⩹"),("⩹","⩺"),("◥▶","◀◤"),("◍","◎"),("⌣","⌣”"),
("͡⎚","⎚"),("≋","≋"),("૦ઁ","૦ઁ"),("ꗞ","ꗞ"),("ꔸ","ꔸ"),("꘠","꘠"),("ꖘ","ꖘ"),("܍","܍"),("ළ","ළ"),("◉","◉"),("☉","☉"),("・","・"),
("▰","▰"),("ᵔ","ᵔ"),("゚","゚"),("□","□"),("☼","☼"),("*","*"),("`","`"),("⚆","⚆"),("⊜","⊜"),(">",">"),("❍","❍"),(" ̄"," ̄"),        
("─","─"),("✿","✿"),("•","•"),("T","T"),("^","^"),("ⱺ","ⱺ"),("@","@"),("ȍ","ȍ"),("x","x"),("-","-"),("$","$"),("Ȍ","Ȍ"),("ʘ","ʘ"),
("Ꝋ","Ꝋ"),("",""),("",""),("⸟","⸟"),("๏","๏"),("ⴲ","ⴲ"),("■","■"),("゚゚"),("◕","◕"),("◔","◔"),("✧","✧"),("■","■"),("♥","♥"),
("¬","¬"),("⨶","⨶"),("⨱","⨱"),("⏓","⏓"),("⏒","⏒"),("⍜","⍜"),("⍤","⍤"),("ᚖ","ᚖ"),("ᴗ","ᴗ"),("ಠ","ಠ"),("σ","σ"),("☯","☯"),("の","の"),("¬¬"),("э","э")]

你的问题有两个子问题。

  1. 字符的像素模式是如何生成的,IDLE有哪些部分?简短的回答是 IDLE 与生成它们无关。 IDLE 使用 tkinter,Python 到 tcl/tk GUI 框架的接口。 IDLE 调用 tkinter.font.families 来获取系统识别的字体名称列表。该方法调用 tk,它调用您的 OS.

我相信为特定 Unicode 代码点显示的像素模式最终取决于您 OS 的字体子系统,可能由 tk 设置的参数修改。字体类型(TrueFont 或其他)也可能影响结果。

  1. 如何判断特定系统上的特定字体实际上可以使用哪些字符?正如您所发现的,OS 可能会填补一些空白,因此您可能会得到比预期更多的结果。我认为 "check the contents" 你的意思是在一些外部参考中查找支持的字符。

现在,在 IDLE 模式下,对话框的字体测试显示仅限于 ASCII 的一个子集。要测试其他任何东西,必须在编辑器中预先生成测试选择并点击 'Apply',或者退出并通过键盘输入或打印使用 unicode 转义的字符串进行测试。我希望有朝一日通过在对话框本身中增加当前动态生成的测试字符显示来改进这一点。

编辑:从那以后我读了一个 tcl unicode 文档,它解释了 tk 试图用小部件字体显示小部件中的每个文本字符,但如果不能,tk 会尝试找到一个最匹配的字体来显示字符.由于即使 'should' 也不能保证搜索成功,因此最好指定一种字体,其中包含计划使用的大部分字符。