質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

1回答

4093閲覧

Python3 Tkinter スタイルについて

person

総合スコア223

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2020/04/04 01:48

編集2020/04/04 01:55

tkinter.ttk --- Tk のテーマ付きウィジェット
に記載されているコード(下のコード)で

default ``` は ```print( ttk.Style().theme_names() )``` で確認できます。 ですがこれと同じように説明するとき - ``` "TCombobox" ``` - ```"configure"```, ```map``` - ```"background"```, ```fieldbackground```, ```"foreground"``` - ```"active"```, ```"!disabled"```, ```"focus"``` - ```"green2"```, ```"green4"```, ```"OliveDrab1"```, ```"OliveDrab2"``` はどのように取得できますか?

from tkinter import ttk
import tkinter

root = tkinter.Tk()

style = ttk.Style()
style.theme_settings("default", {
"TCombobox": {
"configure": {"padding": 5},
"map": {
"background": [("active", "green2"),
("!disabled", "green4")],
"fieldbackground": [("!disabled", "green3")],
"foreground": [("focus", "OliveDrab1"),
("!disabled", "OliveDrab2")]
}
}
})

combo = ttk.Combobox().pack()

root.mainloop()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

-tkinter.ttk --- Tk のテーマ付きウィジェット

python

1 2import tkinter 3from tkinter import ttk 4 5root = tkinter.Tk() 6 7style = ttk.Style() 8style.theme_settings("default", { 9 "TCombobox": { 10 "configure": {"padding": 5}, 11 "map": { 12 "background": [("active", "green2"), 13 ("!disabled", "green4")], 14 "fieldbackground": [("!disabled", "green3")], 15 "foreground": [("focus", "OliveDrab1"), 16 ("!disabled", "OliveDrab2")] 17 } 18 }, 19}) 20 21## (追記) 環境によってデフォルトのthemeが違う事があるので、明示的に指定 22style.theme_use("default") 23 24## Python document側の間違い? 25combo = ttk.Combobox(root) 26combo.pack() 27 28from pprint import pprint 29print(combo.winfo_class()) # (1) 30pprint(style.layout(combo.winfo_class())) # (2) 31pprint(combo.configure()) # (3) 32print(style.element_names()) # (4) 33print(style.map("TCombobox", "background")) # (5) 34 35root.mainloop()

イメージ説明

緑色に変わっていないと、デフォルトのテーマが有効になっていないので注意。

# 1) combo.winfo_class() 'TCombobox' # 2) style.layout(combo.winfo_class()) [('Combobox.field', {'children': [('Combobox.downarrow', {'side': 'right', 'sticky': 'ns'}), ('Combobox.padding', {'children': [('Combobox.textarea', {'sticky': 'nswe'})], 'expand': '1', 'sticky': 'nswe'})], 'sticky': 'nswe'})] # 3) combo.configure() {'background': ('background', 'windowColor', 'WindowColor', '', ''), 'class': ('class', '', '', '', ''), 'cursor': ('cursor', 'cursor', 'Cursor', '', ''), (省略) # 4) style.element_names() ('label', '', 'focus', 'treearea', 'separator', 'image', 'arrow', 'downarrow', 'Menubutton.indicator', 'Treeitem.row', 'vsash', 'text', 'sizegrip', 'indicator', 'Treeheading.cell', 'leftarrow', 'border', 'Radiobutton.indicator', 'hsash', 'vseparator', 'fill', 'thumb', 'background', 'uparrow', 'hseparator', 'trough', 'rightarrow', 'Treeitem.indicator', 'slider', 'field', 'pbar', 'Checkbutton.indicator', 'textarea', 'client', 'tab', 'padding') # 5) style.map("TCombobox", "background") [('active', 'green2'), ('!disabled', 'green4')]

各関数の説明はドキュメントを参照してください。


注意点2箇所

  • theme_use しないと win10では適応されてませんでした。
  • combo = tk.Combobox().pack() について、

python

1# 誤り。comboは None になります。 2combo = ttk.Combobox().pack() 3 4# OK. IDLE 等でも使われているコード。 5# ウィジェットのリソースを管理するのはPythonではないので、 6# bind()等の必要がない場合は、変数への代入は省略できます。 7ttk.Combobox().pack() 8 9# nameを付けると、生成時にPythonの変数に入れなくても、 10# 後から nametowidget() で問い合わせることが出来ます。 11 12ttk.Combobox(name="aaa").pack() 13 14combo = root.nametowidget(".aaa") 15

投稿2020/04/04 03:28

編集2020/04/04 03:47
teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問