この記事をはじめ、TreeViewについてネット上の記事を模索しましたが
標題のことが分からなかったので 質問させて頂きます。
①列と行を仕切る罫線は表示できないのでしょうか(表示されていないサンプルばかりが目立つ!)
②空白行を選択してレコードの登録を行う、もしくは表示された行の内容を上書きするようなことはできないのでしょうか?
初歩的なことと思われますが よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
ttk.Styleで出来ないか、挑戦してみましたが、このあたりが限界。縦の余白は、
ライブラリ内部(ttk の C言語のソース)で左右に固定値で余白をとっていて
外部からパラメーターで調整する方法は見当たりませんでした。
Ttk_Padding cellPadding = {4, 0, 4, 0};
※ tk のバージョンによっては、Treeview のスタイル関連で一部動かないコードがあります。
tk側の不具合
例えば、tag をつけて行毎のスタイルを指定する場合等、パッチが必要になります。
解決策としては、丸投げになりますが
- 自分でウィジェットを作る
- 使えるライブラリを探す pypi で "tkintar table" を検索
レイアウトや見栄えに関して、複雑な要求がある場合は、
可能なら他の GUI ライブラリや、HTMLが使えるものにするのも選択肢です。
tkinter のスタイルに関する情報は殆どなくて、
Tcl言語のコードや、その大元のライブラリのコード(C言語)を探すことになります。
一応、tkinter は tcl のライブラリ資産も活かせるのですが、
サンプルコードなどは殆ど見かけられないので、導入のハードルは高いです。
空白行を選択してレコードの登録を行う、
もしくは表示された行の内容を上書きするようなことはできないのでしょうか?
ttk.Treeview では対応してません。
自分で、クリックした位置のセルにポップアップで 入力ウィジェットを表示~
等の実装をすることになります。
各セルに枠を付ける例 (windowsのみ、不完全なコード)
python
1import tkinter as tk 2from tkinter import ttk 3 4root = tk.Tk() 5style = ttk.Style(root) 6tree = ttk.Treeview(root, show="headings", columns=["key", "value"]) 7for name in tree["columns"]: 8 tree.heading(name, text=name) 9for num in range(10): 10 tree.insert("", "end", values=[num, num]) 11tree.pack(fill=tk.BOTH, expand=True) 12 13 14style.configure("Treeview", padding=10) 15style.configure("Treeview.Heading", padding=10) 16style.configure("Treeview.Cell", padding=1) 17 18# NOTE: windows only 19root.tk.eval(""" 20 ttk::style element create plain.field vsapi \ 21 EDIT 6 {disabled 4 focus 3 hover 2 {} 1} -padding {5 2 5 5} 22""") 23 24style.layout("Treeview.Cell", [ 25 (".plain.field", { 26 "sticky": "snwe", 27 "children": [ 28 ("Treeview.padding", { 29 "sticky": "snwe", 30 "children": [ 31 ("Treeview.text", {"sticky": "e",}) 32 33 ]}) 34 ] 35 }) 36]) 37style.map("Treeview", 38 foreground=[("focus", "black")], 39 background=[], 40 filledbackground=[], 41) 42 43root.mainloop()
行背景を変えるときのパッチ
python
1import tkinter as tk 2from tkinter import ttk 3 4def fixture_treeview_tag_config(style): 5 # NOTE: https://bugs.python.org/issue36468 6 def fixed_map(option): 7 # Fix for setting text colour for Tkinter 8.6.9 8 # From: https://core.tcl.tk/tk/info/509cafafae 9 return [elm for elm in style.map('Treeview', query_opt=option) if 10 elm[:2] != ('!disabled', '!selected')] 11 12 style.map('Treeview', 13 foreground=fixed_map('foreground'), 14 background=fixed_map('background')) 15 16 17root = tk.Tk() 18tree = ttk.Treeview(root) 19tree.config( 20 show="headings", 21 columns=["key", "value"], 22) 23for name in tree["columns"]: 24 tree.heading(name, text=name) 25 26style = ttk.Style() 27fixture_treeview_tag_config(style) 28style.element_create("Treeheading.border", "from", "default") 29style.configure("Treeview.Heading", 30 font=('Calibri', 13, 'bold'), 31 background="#aaaaaa", 32 foreground="white", relief="flat") 33tree.tag_configure('odd', background='#eeeeee') 34tree.tag_configure('even', background='#DFDFDF') 35 36for idx, num in enumerate(range(1, 10)): 37 tag = ["odd", "even"][idx % 2] 38 tree.insert("", tk.END, values=["key{}".format(num), num], tags=(tag,)) 39 40tree.pack(fill=tk.BOTH, expand=True) 41 42root.mainloop()
投稿2020/05/27 09:48
総合スコア8681
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
Python(TkInter) TreeViewを導入する前に確認、列と行を仕切る罫線は表示できないか、照会機能にしか用えないのか(空白行を常に表示し、レコード登録することに使えないか)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/27 11:57
2020/05/27 14:17