web-dev-qa-db-ja.com

Python Tkinterのデフォルトフォントを変更します

私はTkinterを使用してPython2.7のGUIで作業していますが、迷惑な問題があります。

可能であれば、すべてのウィジェットで使用されるデフォルトのフォントを1行で定義したいと思います。この行は、EntryまたはComboBoxで使用されているフォントのみを変更します。

root.option_add("*Font", "courier 10")

例ではチェックボックスのラベルではありません。

定義済みのフォント「TkDefaultFont」が存在することがわかりましたが、その構成を変更できません。

print tkFont.Font(font='TkDefaultFont').configure()
tkFont.Font(font='TkDefaultFont').config(family='Helvetica', size=20)
tk.TkDefaultFont = tkFont.Font(family="Helvetica",size=36,weight="bold")
print tkFont.Font(font='TkDefaultFont').configure()

戻る:

{'family': 'DejaVu Sans'、 'weight': 'normal'、 'slant': 'roman'、 'overstrike':0、 'underline':0、 'size':-12} {'family': 'DejaVu Sans'、 'weight': 'normal'、 'slant': 'roman'、 'overstrike':0、 'underline':0、 'size':-12}

(エラーはありませんが、何も変わりません!!)

私は何を間違っていますか?

22
ericc

Tkinterにはいくつかの組み込みフォントがあります-TkDefaultFontTkTextFontTkFixedFontなど。これらはすべて「名前付きフォント」と呼ばれるものです。それらは非常に強力です-これらの1つを変更すると、それらを使用するすべてのウィジェットも変更されます。

これらのフォントの1つを変更するには、そのフォントのハンドルを取得し、configureメソッドを使用して変更します。たとえば、TkDefaultFontのサイズを48に変更するには、次のようにします。

_default_font = tkFont.nametofont("TkDefaultFont")
default_font.configure(size=48)
_

それでおしまい。他に何もする必要はありません-TkDefaultFontを使用するすべてのものが即座に変更に気づきます。

あなたの質問では、TkDefaultFontフォントをすべてで使用することを望んでいます。これを行うには、先ほど示したように_option_add_を使用できます。

_root.option_add("*Font", default_font)
_

ただし、_option_add_は作成されたウィジェットにのみ影響することに注意してくださいafterは_option_add_を呼び出したため、他のウィジェットを作成する前に行う必要があります。

また、最初にフォントインスタンスを取得したくない場合は、_option_add_にフォント名を指定できます(つまり、root.option_add("*Font", "TkDefaultFont"))。

37
Bryan Oakley

注意:Py2.7に関する質問ですが、私の答えはPy3についてです。概念はまったく同じです。しかし、_tkinter.font_の代わりに、Py2などにはtkFontを使用します。

デフォルトのフォント、または名前の付いたフォントを変更する場合は、nametofont()を使用してフォントオブジェクトにアクセスする必要があります。

_def_font = tkinter.font.nametofont("TkDefaultFont")
_

次に、返されたオブジェクトを次のように設定します

_def_font.config(size=24)
_

あなたが電話するとき

_myfont = tkinter.font.Font(font="TkDefaultFont")
_

実際には、同じ属性を持つ新しい名前付きフォントを作成しています。これを示すために:

str(def_font)は "TkDefaultFont"を提供し、

str(myfont)は "font1"を返します

おっと..言及するのを忘れていた...あなたはあなたが間違っていることを尋ねた。そのうちの1つは2行目です。新しい名前のフォントを作成して構成しますが、それを変数にキャプチャしません。キャプチャした場合は、その名前のフォントを使用できます。しかし、それでもデフォルトの名前付きフォントは変更されません。そのためには、上記で説明したようにnametofont()を使用する必要があります。

0
Gary02127