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

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

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

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

Tkinter

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

Q&A

解決済

1回答

7034閲覧

Python3 Tkinter Treeviewの指定行の背景色を変更したい

person

総合スコア224

Python 3.x

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

Tkinter

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

0グッド

0クリップ

投稿2020/11/18 04:15

編集2020/11/18 17:17

Treeviewの指定行の背景色と文字色を変更したいです。
tkinter ttk treeview色付きの行
を参考に文字色の色を設定できましたが、背景色が変更できていません。
(行クリック時の選択状態のときは別の色にしたいです。)

また、あとから指定行の色を変更したい場合はどうすればいいですか。
例えば、ddd,eee,fff を青色から緑色に変更する。

Python

1from tkinter import ttk 2import tkinter as tk 3 4def fixed_map(option): 5 # Fix for setting text colour for Tkinter 8.6.9 6 # From: https://core.tcl.tk/tk/info/509cafafae 7 # 8 # Returns the style map for 'option' with any styles starting with 9 # ('!disabled', '!selected', ...) filtered out. 10 11 # style.map() returns an empty list for missing options, so this 12 # should be future-safe. 13 return [elm for elm in s.map('Treeview', query_opt=option) if 14 elm[:2] != ('!disabled', '!selected')] 15 16 17if __name__ == "__main__": 18 win = tk.Tk() 19 win.geometry("500x400") 20 21 # 幅取得 22 win.update_idletasks() # winfo_width() の戻り値 1 回避 23 win_width = win.winfo_width() 24 25 # 引き伸ばし 26 win.rowconfigure(0, weight=1) 27 win.columnconfigure(0, weight=1) 28 29 # スタイル_テーマ 30 s = ttk.Style() 31 s.theme_use("clam") 32 33 s.map('Treeview', 34 foreground=fixed_map('foreground'), 35 background=fixed_map('background') 36 ) 37 38 39 tree = ttk.Treeview(win) 40 # 列数 41 tree["columns"] = (1, 2, 3) 42 tree["show"] = "headings" 43 # 列幅指定 44 tree.column(1, width=int(win_width/3)) 45 tree.column(2, width=int(win_width/3)) 46 tree.column(3, width=int(win_width / 3)) 47 # ヘッダ 48 tree.heading(1, text="Data1") 49 tree.heading(2, text="Data2") 50 tree.heading(3, text="Data3") 51 tree.grid(row=0, column=0, sticky="nsew") 52 53 tree.tag_configure("mytag1", background="red", foreground="blue") 54 tree.tag_configure("mytag2", background="green", foreground="yellow") 55 56 # インサート 57 id = [] 58 id.append(tree.insert("", "end", value=["aaa", "bbb", "ccc"])) 59 id.append(tree.insert("", "end", value=["ddd", "eee", "fff"], tags="mytag1")) 60 id.append(tree.insert("", "end", value=["ggg", "hhh", "iii"], tags="mytag2")) 61 62 # 後からtag変更 63 #tree.item(id[1], tags="") 64 65 # 全id取得 66 #print(tree.get_children()) 67 68 win.mainloop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

tcl/tk 側 (ver8.6) の既知のバグで patch で対応可能です。

python

1 2 win.tk.eval(""" 3 ttk::style map Treeview \ 4 -foreground {disabled SystemGrayText \ 5 selected SystemHighlightText} \ 6 -background {disabled SystemButtonFace \ 7 selected SystemHighlight} 8 """)

指定行の色変更は、指定行にタグをつける、
タグに対して色設定で対応できます。


関連: PySimpleGUI の質問ですが、Treeview の問題についての情報

 patch での対応方法

投稿2020/11/18 05:11

編集2020/11/18 05:18
teamikl

総合スコア8681

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

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

person

2020/11/18 05:48 編集

回答ありがとうございます。 Windows(Python3.8.2, tk 8.6.9)ではダメでしたが、ラズパイ(Python 3.5.3, tk 8.6.6)では質問文のコードで背景色が変わっているのを確認しました。 それとは別で、Windows(Python3.8.2, tk 8.6.9)で、 下記サイトの回答にある方法では背景色が黄色くなっているのを確認しました。 Python ttk.Treeview python3.7でリストに割り当てたtagに対して色を設定する方法 https://ja.stackoverflow.com/questions/64095/python-ttk-treeview-python3-7%E3%81%A7%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AB%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%81%9Ftag%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E8%89%B2%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
person

2020/11/18 06:14 編集

先ほどのURLのコードでのやつは ttk.Style().theme_use()がないから背景色が反映したっぽいです。 自分の質問文のコードでも試しました。 s.theme_use("clam") をコメントアウトしたら背景色が変わりました。
teamikl

2020/11/18 06:17

テーマによっては(windowsでのボタンの背景など) 設定は変更されてても、他の表示が優先されて 見た目が変わってないように見えるものもありますね。 古いバージョンでの上記のpatch適応がどう働くかは未確認ですが、 patch 適応の際はTkのVersion 等を確認した方が良いかもしれません。 > tkinter.TkVersion で判別
person

2020/11/18 08:08

パッチについては、 s.theme_use("clam") 以降に記述したら、背景色が変わりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問