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

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

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

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

Python

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

Q&A

解決済

1回答

3222閲覧

pythonで、treeview()の「外枠線のスタイル(太さ)」と「背景色」を変更したい

退会済みユーザー

退会済みユーザー

総合スコア0

Tkinter

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

Python

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

0グッド

0クリップ

投稿2021/07/11 08:28

編集2021/07/11 08:30

前提・実現したいこと

pythonのtkinterにて、ツリービューを作成しています。
ですが、ツリービューの「外枠線のスタイル(太さ)を変更する方法」と
「背景色を変更する方法(項目毎では無く、全ての背景色)」がどうしてもわかりません。
どうかご教授いただきたいです。

該当のソースコード

python

1import tkinter 2from tkinter import ttk 3 4root = tkinter.Tk() 5 6#Treeview 7tree = ttk.Treeview(root) 8 9#親要素の挿入 10parent = tree.insert( 11 "", #最上位は空文字 12 "end", #挿入位置 13 text="parent" #表示する文字列 14 ) 15 16#子要素の挿入 17child = tree.insert( 18 parent, #親要素を指定 19 "end", #挿入位置 20 text="child" #表示する文字列 21 ) 22 23tree.pack(pady=10) 24root.geometry("600x600") 25root.mainloop()

試したこと

treeview()にbgやfgを当ててみたり、configure()等を試してみたりしました。ですが、どれもエラーにより動きませんでした。

補足情報

Pythonは ver.3.9.4
開発環境はatom エディタです。

回答よろしくお願い致します。

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

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

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

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

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

teamikl

2021/07/11 15:54

枠線について確認ですが、外枠線はウィジェット全体の外枠のみですか? セルの項目別に線を設定したい場合等は、Treeview では対応できない場合があります。
退会済みユーザー

退会済みユーザー

2021/07/12 07:28

>>>teammikiさん おっしゃる通り、ウィジェット全体の外枠です。
guest

回答1

0

ベストアンサー

枠線の太さは解りませんが、Treeview の背景色は上流ライブラリの不具合で
tcl/tk のバージョンが 8.6 の場合に発生します。

関連


背景色のみのパッチ(簡易版)

python

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

python

1#!/usr/bin/env python 2 3import tkinter as tk 4from tkinter import ttk 5 6root = tk.Tk() 7style = ttk.Style() 8 9# 注意点: theme によって有効・無効になるスタイルがあります。 10# 例えば、このコードの場合は、theem_use("default") にすると 11# ttk.Frame 枠線の色が変わります。 12style.theme_use("clam") 13 14# 不具合対応パッチ 15root.tk.eval(""" 16 ttk::style map Treeview \ 17 -foreground {disabled SystemGrayText \ 18 selected SystemHighlightText} \ 19 -background {disabled SystemButtonFace \ 20 selected SystemHighlight} 21""") 22 23style.configure("Treeview", 24 background="#eeeeff", 25 fieldbackground="#eeeeff", 26 # NOTE: Treeview にも border オプションはありますが、 27 # theme によって挙動が異なる為、目的の用途にはほぼ使えません。 28 borderwidth=0, 29) 30style.configure("Treeview.Heading", 31 background="#aaaaff", 32 borderwidth=0, 33 ) 34style.configure("Tree.TFrame", 35 # ttk.Frame の場合、widget のオプションと, 36 # style のオプション両方で指定します。 37 # ここも theme 次第では挙動が変わります。 38 background="#aaaaff") 39 40## 外枠線の為に Frame を生成。 41#frame = tk.Frame(root, bd=4, bg="#aaaaff") 42frame = ttk.Frame(root, style="Tree.TFrame", 43 borderwidth=4, relief='solid') 44frame.pack() 45 46tree = ttk.Treeview(frame) # NOTE: 外枠の為に、親クラスにFrameを設定。 47tree.pack() 48tree.tag_configure("item", background="#eeeeff") 49parent = tree.insert("", tk.END, text="parent", tags="item") 50child = tree.insert(parent, tk.END, text="child", tags="item") 51root.mainloop()

イメージ説明

投稿2021/07/11 12:11

編集2021/07/12 07:53
teamikl

総合スコア8664

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

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

退会済みユーザー

退会済みユーザー

2021/07/11 13:44

回答ありがとうございます。このコードをソースコード本文に貼り付けるのでしょうか? また、本文のどのあたりに配置するべきでしょうか? いただいたコードの扱い方をもう少し詳細に教えていただけると幸いです。
teamikl

2021/07/11 15:31 編集

適用例は関連リンク先をご覧ください。 >treeview()にbgやfgを当ててみたり、 ttk のウィジェットには bg や fg のオプションは無くて、 ttk.Style を使い色等の変更を行います。
teamikl

2021/07/11 16:07

枠線については、簡単な実装方法は tk.Frame に載せる方法です。 frame = tk.Frame(root, bd=4, bg="red") # border=4, background="red" frame.pack() tree = ttk.Treeview(frame) tree.pack()
退会済みユーザー

退会済みユーザー

2021/07/12 07:34

枠線については、ご教示いただいた通りにしてみたら、無事解決いたしました!有り難うございますm(_ _)m
退会済みユーザー

退会済みユーザー

2021/07/12 07:56 編集

回答のソースコードをコピペして実行したところ、動作いたしました!ありがとうございました。 ...といいたいところですが、atomエディタのatom-runnerにて実行したところ、 「Unable to find command: /usr/bin/env Are you sure PATH is configured correctly? ENV PATH: C:\Program Files (x86)\Common Files\Apple\Apple Application Support;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\Program Files (x86)\Fujitsu\FJAgent\Core\bin;C:\Program Files\Csound6_x64\bin;C:\Users\aoyag\AppData\Local\Programs\Python\Python39\Scripts\;C:\Users\aoyag\AppData\Local\Programs\Python\Python39\;C:\Users\aoyag\AppData\Local\Microsoft\WindowsApps;C:\Users\aoyag\AppData\Local\atom\bin;C:\Users\aoyag\Desktop\Microsoft VS Code\bin Error: spawn /usr/bin/env ENOENT at Process.ChildProcess._handle.onexit (internal/child_process.js:264:19) at onErrorNT (internal/child_process.js:456:16) at processTicksAndRejections (internal/process/task_queues.js:84:9)」 というエラーメッセージが来て、実行することができません。 (python標準のIDLEだと実行できました) お手数ですが、 「このエラーメッセージの意味」 「なぜこのエラーメッセージが発生してしまうのか」 をご教授いただけたらと思います。何回も質問してしまい申し訳ありません。
teamikl

2021/07/12 07:59

背景色は、テーマによって有効にならない場合があるかもしれません(確証なし) 解答内の下のコードを、利用例に変更しました。 - テーマ選択 theme_use - 不具合修正を適用 - ttk.Style で Treeview の fieldbackground を設定 - (テーマによっては追加で background の設定が必要かもしれない)
teamikl

2021/07/12 08:08

エラーについては、一行目の #!/usr/bin/env python shebang 行の解釈ですね。不要なら1行目を削除で出なくなるはずです。 通常のPythonで実行する場合は コメント行なので、無視されます。 複数のバージョンをインストールしてる場合や、新しいバージョンでの新機能を使う場合 スクリプト側で特定バージョンを指定したい場合に使えます。 今回は、私の python スクリプトを書く際のテンプレートから そのまま張り付けて残ってしまったので、質問の問題については関係ありません。
退会済みユーザー

退会済みユーザー

2021/07/12 08:17

わかりました、参考にしてみます。 今、いろいろ試してみている状況です。 何か進展があったら報告いたします。 回答有り難うございます。
teamikl

2021/07/12 08:51 編集

もし、windows で atom-runner でも shebang でのバージョン切り替えに対応したい場合は、 atom-runner の設定でしょうか。 メニューから [File][Config] atom-runner の設定で 'python': 'py' に変更。 runner の設定がない場合は、Ctrl-comma -> Package -> atom-runnerを検索 -> Settings README に書かれている 'runner': ~の設定をコピーし、config.cson に貼り付け "*":  ... 略 ..  "runner":   "scopes":    "python": "py" ※コメント欄なので、全角スペースです述してますが、インデントは適切に 半角スペース2個に変更。 windows環境では、py.exe というコマンドがインストールされてるはずなので、 そちらのコマンド経由で実行するように設定する py.exe が PATH の通った場所に無い場合は、Pythonのインストールから再確認。
退会済みユーザー

退会済みユーザー

2021/07/12 08:46

何回かトライ&エラーを繰り返し、何とか成功いたしました! これまで、本当にありがとうございました! ベストアンサーにさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問