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

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

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

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

Tkinter

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

Python

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

Q&A

解決済

1回答

1916閲覧

Tkinter スクロールバーをうまく表示できない

person

総合スコア223

Python 3.x

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

Tkinter

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

Python

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

0グッド

0クリップ

投稿2019/12/25 03:58

編集2019/12/25 05:42

Tkinterでスクロールバーをうまく表示できません。

一番下のソースの

tree.pack()

tree.pack(side="left")

にして、横方向のスクロールバーをコメントアウトすれば、縦方向のスクロールバーは表示できるのですが、
縦横両方のスクロールバーを表示するとなると、うまく表示できません。

どなたかわかる方、回答よろしくお願いします。

ソース

Python

1import tkinter as tk 2from tkinter import ttk 3 4win = tk.Tk() 5win.geometry("480x360") 6win.title("Scrollbar Test") 7 8frame = tk.Frame(win) 9frame.grid() 10 11tree = ttk.Treeview(frame, height=3) 12tree["columns"] = (1,2,3) 13tree["show"] = "headings" 14tree.column(1, width=75) 15tree.column(2, width=100) 16tree.column(1, width=100) 17tree.heading(1, text="No.") 18tree.heading(2, text="data1") 19tree.heading(3, text="data2") 20 21tree.insert("","end",values=("1","A","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbb")) #xsb 確認用 22tree.insert("","end",values=("2","B","b")) 23tree.insert("","end",values=("3","C","c")) 24tree.insert("","end",values=("4","D","d")) 25tree.insert("","end",values=("5","E","e")) 26tree.insert("","end",values=("6","F","f")) 27tree.insert("","end",values=("7","G","g")) 28tree.insert("","end",values=("8","H","h")) 29tree.insert("","end",values=("9","I","i")) 30tree.insert("","end",values=("10","J","j")) 31tree.pack() 32 33ysb = tk.Scrollbar(frame, width=25, orient=tk.VERTICAL, command=tree.yview) 34tree.configure(yscrollcommand=ysb.set) 35ysb.pack(side="right", fill='y') 36 37xsb = tk.Scrollbar(frame, width=25, orient=tk.HORIZONTAL, command=tree.xview) 38tree.configure(xscrollcommand=xsb.set) 39xsb.pack(fill='x') 40 41win.mainloop()

実行結果
実行結果画像

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

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

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

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

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

guest

回答1

0

ベストアンサー

grid()で配置したほうが簡単なのでは

Python

1# (略) 2tree.grid(row=0, column=0) 3# (略) 4ysb.grid(row=0, column=1, sticky='nsw') 5# (略) 6xsb.grid(row=1, column=0, sticky='new')

投稿2019/12/25 04:45

magichan

総合スコア15898

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

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

person

2019/12/25 05:06

回答ありがとうございます。 同じように変更を加えたところ、縦方向のスクロールバーは期待通りになりました。 ただ、横方向のスクロールバーが機能していません。 横スクロールバーは、質問文に記載した書き方ではダメなのでしょうか?
magichan

2019/12/25 05:41

いや、機能していると思います。 機能していないように見えるのはスクロールする必要がない(これ以上のスクロールする範囲が存在しない)からとなります。 現在のコードでは、Treeviewのカラムの幅が 75+100+100 (計 275)となっておりますので、外部のFrameの幅は自動的にそれが収まる幅が設定されますので、これ以上スクロールエリアが無いため、スクロールバーは無効化表示されます。 試しに Treeviewの 'data2' のヘッダの右側をドラッグして広げて見てください。(分かりにくくてすみませんが)スクロールバーが有効になるはずです。
person

2019/12/25 05:46

ありがとうございます。 data2の1行目に入れた aaaaaabbbbbb という文字列をすべて見れなかったので、スクロールバーが機能していないと思い込んでいました。 data2のヘッダの右側の縁を右方向へドラッグしたら、その文字列全てを見れるようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問