8

ここのセクション 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.")

私が得るのはこれです:

TkFixedFont、サイズ 16

それは私には等幅に見えないので、私のプラットフォームで何が正確に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見えますか?

DejaVu Sans Mono、サイズ 16

上で引用したTkdocs.com チュートリアルには、名前付きフォントに関するセクションもあり、そこには次のように書かれています。

CourierTimes、およびの名前Helveticaがサポートされていることが保証されています (また、適切なモノスペース、セリフ、またはサンセリフ フォントにマップされています)。

だから私は試してみます:

style.configure("Courier.TButton", font=("Courier", 16))
button.configure(style="Courier.TButton")

そして今、最終的に等幅の結果が得られます:

ここに画像の説明を入力

確かに、私のプラットフォームが標準の等幅フォントとして選択するCourier NewわけではありませんDejaVu Sans Monoが、それは少なくとも何かですよね? しかし、うまくいくべきではありませんTkFixedFontか?

4

1 に答える 1