私は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}
(エラーはありませんが、何も変わりません!!)
私は何を間違っていますか?
Tkinterにはいくつかの組み込みフォントがあります-TkDefaultFont
、TkTextFont
、TkFixedFont
など。これらはすべて「名前付きフォント」と呼ばれるものです。それらは非常に強力です-これらの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")
)。
注意: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()
を使用する必要があります。