ここのセクション Standard Fontsで述べられています:
特に多かれ少なかれ標準的なユーザー インターフェイス要素については、各プラットフォームで使用する特定のフォントが定義されています。Tk は、これらの多くを常に利用可能な標準フォント セットにカプセル化します。もちろん、標準ウィジェットはこれらのフォントを使用します。これは、プラットフォームの違いを抽象化するのに役立ちます。
そして、事前定義されたフォントのリストには次のものがあります。
TkFixedFont
A standard fixed-width font.
Tkinter
これは、たとえば、この回答で述べられているように、プラットフォームに依存しない等幅フォントを選択する標準的な方法でここで見つけることができるものにも対応しています。
悲しいかな、以下の簡単なコードのように、自分でこれをやろうとすると:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
frame = ttk.Frame(root)
style = ttk.Style()
style.configure("Fixed.TButton", font=("TkFixedFont", 16))
button = ttk.Button(text="Some monospaced text, hopefully", style="Fixed.TButton")
frame.grid()
button.grid(sticky="news")
button.configure(text="I don't quite like this font.")
私が得るのはこれです:
それは私には等幅に見えないので、私のプラットフォームで何が正確にTkinter
変換されるかを次のように確認します。TkFixedFont
from tkinter import font
font.nametofont("TkFixedFont").actual()
答えは次のとおりです。
{'family': 'DejaVu Sans Mono', 'size': 9, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0}
では、どのようにDejaVu Sans Mono
見えますか?
上で引用したTkdocs.com チュートリアルには、名前付きフォントに関するセクションもあり、そこには次のように書かれています。
Courier
、Times
、およびの名前Helvetica
がサポートされていることが保証されています (また、適切なモノスペース、セリフ、またはサンセリフ フォントにマップされています)。
だから私は試してみます:
style.configure("Courier.TButton", font=("Courier", 16))
button.configure(style="Courier.TButton")
そして今、最終的に等幅の結果が得られます:
確かに、私のプラットフォームが標準の等幅フォントとして選択するCourier New
わけではありませんDejaVu Sans Mono
が、それは少なくとも何かですよね? しかし、うまくいくべきではありませんTkFixedFont
か?