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

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

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

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

Tkinter

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

Q&A

解決済

1回答

8696閲覧

Tkinterのスクロールバー表示について

person

総合スコア224

Python 3.x

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

Tkinter

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

0グッド

0クリップ

投稿2020/02/17 11:06

TreeViewとそれに対応したスクロールバーを表示させるため、次のようにソースコードを書きました。

そこで2つほど質問があります。

1つ目は、ウィンドウの横幅を狭めていくと縦方向のスクロールバーがあるサイズを境に消えてしまいます。隠れると言ったほうが正しいのでしょうか?
スクロールバーの表示を優先させるにはどうすればいいでしょうか?

もう1つはysb(縦方向のスクロールバー)と同様にxsb(横方向のスクロールバー)を配置したのですがうまく表示できませんでした。
できればpackで配置したいです。どのように配置すればいいでしょうか?

Python

1import tkinter as tk 2import tkinter.ttk as ttk 3 4win = tk.Tk() 5 6tree = ttk.Treeview(win) 7tree["columns"] = (1,2,3) 8tree["show"] = "headings" 9tree.column(1, width=100) 10tree.column(2, width=75) 11tree.column(3, width=200) 12tree.heading(1, text="名前") 13tree.heading(2, text="年齢") 14tree.heading(3, text="住所") 15for i in range(30): #スクロール用に多めにデータをINSERT 16 tree.insert("", "end", values=("山田 太郎",10,"東京都新宿区")) 17 tree.insert("", "end", values=("鈴木 一郎","3","東京都練馬区")) 18 tree.insert("", "end", values=("佐藤 健一","6","東京都渋谷区")) 19tree.pack(side="left", fill="both", expand=1) #fill="y" や fill="both" を使うとき、expandを1にしないと意図した表示にならない 20 21ysb = tk.Scrollbar(win, orient=tk.VERTICAL, width=35, command=tree.yview) 22tree.configure(yscrollcommand=ysb.set) 23ysb.pack(side="right", fill="y") #expandを1にすると表示が変・・・ 24 25""" 26xsb = tk.Scrollbar(win, orient=tk.HORIZONTAL, width=35, command=tree.xview) 27tree.configure(yscrollcommand=xsb.set) 28xsb.pack(side="bottom", fill="x") 29""" 30 31 32win.mainloop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずは2つ目の回答から

縦方向のスクロールバーと横方向のスクロールバーを表示する方法ですが、

できればpackで配置したいです。

と書いてありますが、素直にgridを使用してください。
レイアウトの制約上どうしても pack を使う必要があるのであれば、
まずはFrameを生成し、そのFrame上に TreeviewScrollbarを gridで配置し、そのFrameを RootWindow上に packで配 置するようにすると良いかと思います。

で、上記の実装を前提にした1つ目の質問を回答となりますが、grid_columnconfigure(),grid_rowconfigure()にてScrollbarが配置されているgridの最小幅を設定することで、スクロールバーを隠さないように実装することができます。

以上、下にFrameを使用した実装例を記述しましたので参考にしてください。

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) 10tree["show"] = "headings" 11tree.column(1, width=100) 12tree.column(2, width=75) 13tree.column(3, width=200) 14tree.heading(1, text="名前") 15tree.heading(2, text="年齢") 16tree.heading(3, text="住所") 17for i in range(30): #スクロール用に多めにデータをINSERT 18 tree.insert("", "end", values=("山田 太郎",10,"東京都新宿区")) 19 tree.insert("", "end", values=("鈴木 一郎","3","東京都練馬区")) 20 tree.insert("", "end", values=("佐藤 健一","6","東京都渋谷区")) 21tree.grid(row=1, column=1, sticky='nsew') 22 23ysb = tk.Scrollbar(frame, orient=tk.VERTICAL, width=35, command=tree.yview) 24tree.configure(yscrollcommand=ysb.set) 25ysb.grid(row=1, column=2, sticky='nsew') 26 27xsb = tk.Scrollbar(frame, orient=tk.HORIZONTAL, width=35, command=tree.xview) 28tree.configure(yscrollcommand=xsb.set) 29xsb.grid(row=2, column=1, sticky='nsew') 30 31frame.grid_columnconfigure(1, weight=1) 32frame.grid_columnconfigure(2, weight=1, minsize=35) 33frame.grid_rowconfigure(1, weight=1) 34frame.grid_rowconfigure(2, weight=1, minsize=35) 35 36frame.pack(fill='both', expand=1) 37win.mainloop()

投稿2020/02/18 03:48

magichan

総合スコア15898

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

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

person

2020/02/18 10:47

回答ありがとうございます。 最小幅も設定できるんですね。gridを使ったほうが良さそうですね。 ちなみに、ウィンドウを広げたときにスクロールバーがwidthで設定した幅より太くなってしまうのですが、最大幅は設定できないのでしょうか? maxsizeというオプションは無いようですが・・・
magichan

2020/02/18 11:39

スミマセン・・明らかに私のポカです。 Windowsサイズが変更されたときにスクロールバーは拡大する必要が無いのですから、 frame.grid_columnconfigure(2, weight=1, minsize=35) frame.grid_rowconfigure(2, weight=1, minsize=35) の2行の weight=1 は不要ですね。
person

2020/02/18 11:57

ありがとうございます。 weightで伸縮設定できるんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問