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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Tkinter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

5512閲覧

TkInter: treeviewの背景色・文字色を行単位に変える記事の紹介が目立ちます、列単位に変更することはできないでしょうか

saya24

総合スコア247

Tkinter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/05 04:47

編集2021/12/05 05:43

ツリービューに行挿入する際、タグを付けて あとから当該タグに tag_configureメソッドで 色を変える記事をお見掛けします。
今回 できれば 列単位に色付けをしていきたいのですが それは無理でしょうか?(こちらなど

以下 現行コードの抜粋ですが、紹介記事でINSERTメソッド内でtag付けしている状況に反し、カラムメソッド内でtag付けしてしまっている関係で エラーを招いています。

python

1_tkinter.TclError: unknown option "-tags"

もし、解決策がある、解決策を紹介した記事がございましたら ご提示頂けましたら幸いです、よろしくお願いします。

python

1def generate_subwindow(): 2 3 '''モーダルダイアログボックスの作成''' 4 dlg_modal = tk.Toplevel() 5 6 # モーダルにする設定 7 dlg_modal.grab_set() 8 dlg_modal.focus_set() 9 dlg_modal.transient(root) 10 11 adjust_windowsize(dlg_modal) 12 13 dlg_modal.grid_columnconfigure([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], weight=1) 14 dlg_modal.grid_rowconfigure([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], weight=1) 15 16 frmTable = ttk.Frame(dlg_modal, name="frmTable") 17 frmTable.grid(row=0, column=0, sticky=tk.E + tk.W + tk.N + tk.S) 18 frmTable.grid_columnconfigure([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], weight=1, minsize=40) 19 frmTable.grid_rowconfigure([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], weight=1) 20 21 tree4 = ttk.Treeview(frmTable, show="headings", height=15) 22 tree4.grid(row=0, column=0, columnspan=10, rowspan=10, sticky=tk.E + tk.W, pady=(10,0), padx=(10,10)) 23 24 ybar4 = ttk.Scrollbar(frmTable, orient=tk.VERTICAL, command=tree4.yview) 25 ybar4.grid(row=0, column=9, rowspan=10, sticky=tk.N + tk.S + tk.E, pady=(10,0), padx=(0,10)) 26 tree4.config(yscrollcommand=lambda f, l: ybar4.set(f, l)) 27 28 xbar4 = ttk.Scrollbar(frmTable, orient=tk.HORIZONTAL, command=tree4.xview) 29 xbar4.grid(row=10, column=0, columnspan=10, sticky=tk.N + tk.S + tk.E + tk.W, padx=(10,10)) 30 tree4.config(xscrollcommand=lambda f, l: xbar4.set(f, l)) 31 32 #ヘッダ挿入 33 tblno = "TABLE" + cmbox_Tbl1.get().split(" : ")[0] 34 lst_tmp = get_TBINFO(tblno) 35 lst_header = [] 36 lst_key = [] 37 if len(lst_tmp) > 0: 38 for i1 in lst_tmp: 39 lst_header.append(i1[1]) 40 if i1[5] > 0: 41 lst_key.append(i1[1]) #表上で色分けするため プライマリキーをリストに格納 42 43 tree4["columns"] = lst_header 44 for i2 in tree4["columns"]: 45 tree4.heading(i2, text=i2, anchor='center') 46 if i2 in lst_key: 47 tree4.column(i2, anchor='center', tags="red") #★色かえるためタグつけるが行単位・予め定義不可?★ 48 else: 49 tree4.column(i2, anchor='center') 50 51 52 viewno = "VIEW" + cmbox_Tbl1.get().split(" : ")[0] 53 lst_tmp = get_VIEWDATA(viewno) 54 idx = 0 55 if len(lst_tmp) > 0: 56 for i in lst_tmp: 57 lst = list(i) 58 lst[0] = lst[0][0:4] + "/" + lst[0][4:6] + "/" + lst[0][6:8] + " " + lst[0][8:10] + ":" + lst[0][10:12] + ":" + lst[0][12:] 59 tree4.insert(parent='', index=tk.END, iid=idx ,values=lst) 60 idx += 1 61 62 tree4.tag_configure("red", foreground="red") #★そうは問屋が卸さないらしい... 63 64 btn_ReturnConvMenu = ttk.Button(frmTable, text = "閉じる", command=dlg_modal.destroy) 65 btn_ReturnConvMenu.grid(row=11, column=9, sticky=tk.N + tk.S + tk.E + tk.W, padx=(0,10)) 66 67 dlg_modal.resizable(0,0) 68 dlg_modal.protocol('WM_DELETE_WINDOW', (lambda: 'pass')())

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

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

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

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

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

guest

回答1

0

ベストアンサー

ttk.Treeview は、単一セルのスタイル変更に対応してません。
列選択で色を変える等も出来ません。

ウィジェットの内部実装で、背景色が描画される時に、
列を区別することが出来ないので、ttk.Treeviewをベースに拡張する事はできません。

本格的な表(Table) ウィジェットが必要な場合は、
用途に適した専用の表ウィジェットを使うか、
キャンバスウィジェットを元にして独自に開発する必要があります。

候補

他の選択肢としては、tcl/tk のテーブルウィジェットを使う方法もありますが、
python から扱いやすいものとなると、あまりないかもしれません。
※ 古いライブラリが多いので、保守されているか最終更新日等に注意。

ttkwidgets の Table ウィジェットは、 ttk.Treeview を拡張したものなので、
上述したような列選択ができない等の制限を受けます。

投稿2021/12/05 08:14

teamikl

総合スコア8760

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

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

saya24

2021/12/05 10:51

よく分かりました。諦めることができてスッキリしました。 例をみつけられなかった状況が 私の問題か否かも判断ができなかったので 助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問