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

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

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

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

Python

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

Q&A

解決済

1回答

909閲覧

ツリービューを横軸でスクロールさせたい

mikami_r

総合スコア13

Tkinter

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

Python

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

0グッド

0クリップ

投稿2022/07/15 03:11

PythonのTkでCSVを読み込んで一覧をTreeviweで表示させる現場で運用するための
簡単なGUIを作成しています。

CSVを読込することはできましたがTreeViweでのスクロール表示が上手くいきません。
調べた上で別投稿のコードを参考に実施してみましたが、Freamのサイズが画面サイズに
追従してしまい、サイズの固定化ができません。

素人質問で申し訳ありませんが処理方法を御教授頂きたくお願い申し上げます。
※可能であれば下記のコードで各々がどのような処理をしているか補足いただけると
非常にありがたいです。

※以下が検証中のサンプルコードです。

Python

1import tkinter as tk 2import tkinter.ttk as ttk 3 4win = tk.Tk() 5 6frame = tk.Frame(win, width=100, height=100) 7 8tree = ttk.Treeview(frame) 9tree["columns"] = (1,2,3,4,5) 10tree["show"] = "headings" 11tree.column(1, width=100) 12tree.column(2, width=75) 13tree.column(3, width=200) 14tree.column(4, width=200) 15tree.column(5, width=200) 16tree.heading(1, text="aaa") 17tree.heading(2, text="bbb") 18tree.heading(3, text="ccc") 19tree.heading(4, text="ddd") 20tree.heading(5, text="fff") 21 22for i in range(30): 23 tree.insert("", "end", values=("a1a1a1a1","b1b1b1b1b","c1c1c1c1c1","d1d1d1d1d","e1e1e1e1e")) 24 tree.insert("", "end", values=("a2a2a2a2a2a","b2b2b2b2b","c2c2c2c2c","d1d1d1d1d","d2d2d2d2d")) 25 tree.insert("", "end", values=("a3a3a3a","b3b3b3b","c3c3c3c3c","d3d3d3dd","e3e3e3e3e3e")) 26tree.grid(row=1, column=1, sticky='nsew') 27 28ysb = tk.Scrollbar(frame, orient=tk.VERTICAL, width=35, command=tree.yview) 29tree.configure(yscrollcommand=ysb.set) 30ysb.grid(row=1, column=2, sticky='nsew') 31 32xsb = tk.Scrollbar(frame, orient=tk.HORIZONTAL, width=35, command=tree.xview) 33tree.configure(yscrollcommand=xsb.set) 34xsb.grid(row=2, column=1, sticky='nsew') 35 36frame.grid_columnconfigure(1, weight=1) 37frame.grid_columnconfigure(2, minsize=35) 38frame.grid_rowconfigure(1, weight=1) 39frame.grid_rowconfigure(2, minsize=35) 40 41frame.pack(fill='both', expand=1) 42win.mainloop()

実施したいイメージの図は下記です。
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

横スクロールしない原因は、ツリーのcolumn が伸縮可能になっているので

  • column メソッドで width と合わせて minwidth を指定してください。
  • xsb.set を指定するのは yscrollcommand → xscrollcommand

以上でウィンドウの横幅が狭い場合に横スクロール可能となるはずです。

ツリーの上下に余白は、余白部分に何も配置しないのであれば
packの引数に pady=[100, 200] のように上下の余白を設定できます。

余白部分に何か他のウィジェットを配置する場合は、
Treeview と同じ親を持つウィジェットを Frame を生成し
pack で配置する場合は side 引数の TOP/BOTTOM を指定、
(pack指定の場合は順番も影響します、上から順に配置)
より複雑化する場合は、tree 自体 grid でのレイアウトに変更して
縦に3つ並べるでも良いかもしれません。

投稿2022/07/16 02:01

teamikl

総合スコア8664

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

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

mikami_r

2022/07/20 02:26

上記の御教授内容で問題解決しました。 御礼遅くなり誠に申し訳ありません。 非常に助かりました!! お手数でなければTreeviewの初歩から応用まで分かりやすく説明しているサイトなどがあれば紹介いただけると嬉しいです。 このあと、選択した行数に応じた処理を関数実行させ、完了後に行の色を変えたいと考えています。
teamikl

2022/07/20 07:30

ttk.Treeview の色変えは、ライブラリ側の不具合が報告されていて パッチ(スクリプト側で対応可・数行程度)を当てないと色変更が出来ないので注意。 参考: Python3 Tkinter Treeviewの指定行の背景色を変更したい https://teratail.com/questions/304991?sort=1 > Treeviewの初歩から応用まで分かりやすく説明しているサイト tkinter の生い立ちから、元々は tcl/tk という 言語・GUI ライブラリがあり tkinter は Python から使う為のwrapperという立ち位置の為、 あまり詳細に解説しているサイトは存じません。特にスタイル変更に関する情報は少なく 検索してピンポイントで目的の情報が見つからなければ、自分で調べなければならない事が多々あります。 参考情報源 - 公式情報(リファレンスやwiki)を読む https://docs.python.org/ja/3/library/tkinter.ttk.html#tkinter.ttk.Treeview https://www.tcl-lang.org/man/tcl/TkCmd/ttk_treeview.htm https://wiki.tcl-lang.org/page/ttk::treeview - 実際のアプリケーションのソースコードを読む (idlelib や thonny 等) - ライブラリのソースコードを読む (Tcl 言語, C言語, 各プラットフォームでのGUIの知識) 応用に関しては、Treeview より テーブル系の外部ライブラリを用いた方が、例が豊富だったり、出来る事が多い印象です。 例えば「巨大な行数を扱いたい」「左側の列を固定したい」みたいなことは 可能ですが、ライブラリとしては対応していないので、独自に実装する必要があります。 出来ないことも幾つか有り、ttk.Treeview では「行」の色変えは出来ても「列」での色替えは出来ません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問