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

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

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

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

Q&A

解決済

2回答

3574閲覧

Python スクロールバーの長さを変えたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2021/02/24 02:13

前提・実現したいこと

root上にlistboxとscrollbarを作りましたが、scrollbarの長さ(高さ)がlistboxのheightと合いません。
listboxとscrollbarの高さを同じにしたいのです。

canvasやframeを作りその上にlistboxとscrollbarを設定すると期待する結果を得られますが、root上では出来ません。
canvasやframeではなくroot上でやりたいのです。

その理由は、単に出来るだけ難しいwidget(この場合はcanvasとかframe)を避けたいのです。

該当のソースコード

Python3.6

11.canvas上のcode: 動作しております。 2 3import tkinter as tk 4 5# rootメインウィンドウの設定 6root = tk.Tk() 7root.title("scroll app") 8root.geometry("200x200") 9 10label_0 = tk.Label(root, text="canvas上にlistbox、barを配置").pack() 11 12 13label_1 = tk.Label(root, text="Your selection", bg="yellow") 14label_1.place(x=60, y=120) 15 16# メインフレームの作成と設置 17canvas = tk.Canvas(root) 18canvas.pack(padx=0, pady=30) 19 20# Listboxの選択肢 21letters = ('All', 'a', 'b', 'c', 'd', 'd', 'f') 22lists = tk.StringVar(value=letters) 23 24# 各種ウィジェットの作成 25listbox = tk.Listbox(canvas, listvariable=lists, width=4, height=4) 26 27# スクロールバーの作成 28scrollbar = tk.Scrollbar(canvas, orient=tk.VERTICAL, command=listbox.yview) 29 30# スクロールバーをListboxに反映 31listbox["yscrollcommand"] = scrollbar.set 32 33# 各種ウィジェットの設置 34listbox.grid(row=0, column=0) 35scrollbar.grid(row=0, column=1, sticky=(tk.N, tk.S)) 36 37 38def show_letter(): 39 for i in listbox.curselection(): 40 selected_letter = listbox.get(i) 41 label_1["text"] = selected_letter 42 43 44btn_1 = tk.Button(root, width=12, text="Click here", 45 bg="light blue", command=show_letter) 46btn_1.place(x=50, y=150) 47 48root.mainloop() 49 50 512.root上でのcode:動作してますが、scrollbarの高さをlistboxに合わせたいのです。 52 53import tkinter as tk 54 55# rootメインウィンドウの設定 56root = tk.Tk() 57root.title("scroll app") 58root.geometry("200x200") 59 60label_0 = tk.Label(root, text="root上にlistbox、barを配置").pack() 61 62label_1 = tk.Label(root, text="Your selection", bg="yellow") 63label_1.place(x=60, y=120) 64 65# Listboxの選択肢 66letters = ('All', 'a', 'b', 'c', 'd', 'e', 'f') 67lists = tk.StringVar(value=letters) 68 69# 各種ウィジェットの作成 70listbox = tk.Listbox(root, listvariable=lists, width=5, height=4) 71listbox.place(x=80, y=30) 72 73# スクロールバーの作成 74scrollbar = tk.Scrollbar( 75 root, width=20, orient=tk.VERTICAL, command=listbox.yview) 76scrollbar.place(x=112, y=30) # , sticky=tk.E + tk.W) 77 78# スクロールバーをListboxに反映 79listbox["yscrollcommand"] = scrollbar.set 80 81 82def show_letter(): 83 for i in listbox.curselection(): 84 selected_letter = listbox.get(i) 85 label_1["text"] = selected_letter 86 87 88btn_1 = tk.Button(root, width=12, text="Click here", 89 bg="light blue", command=show_letter) 90btn_1.place(x=50, y=150) 91 92root.mainloop() 93 94

試したこと

canvs上でのscrollbar設定を試しましたが、エラーとなります。 

root上では出来ないのでしょうか?

補足情報(FW/ツールのバージョンなど)

OS:windows10
Python ver: 3.7

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

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

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

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

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

guest

回答2

0

ベストアンサー

苦労してplaceでレイアウトする必要があるなら、

listboxをplaceで配置後、いったんrootをupdateしてから、listboxに対してwinfo_heightを使うと高さが得られます。こいつを、scrollbarをplaceする際のheightに指定します。

Python

1listbox = tk.Listbox(root, listvariable=lists, width=5, height=4) 2listbox.place(x=80, y=30) 3root.update() 4 5scrollbar = tk.Scrollbar( 6 root, width=20, orient=tk.VERTICAL, command=listbox.yview) 7scrollbar.place(x=112, y=30, height=listbox.winfo_height())

しかし、canvasなりframeなり使ってpackするほうが簡単なので(後でウィンドウをリサイズする場合など)、面倒がらずにcanvasなりframeなりの使い方を身につけましょう。

投稿2021/02/24 03:08

Daregada

総合スコア11990

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

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

退会済みユーザー

退会済みユーザー

2021/02/24 04:08

Daregataさん 教わったacodeで動作しました。 そしてその理由も理解できました。 これからはcanvasやframeでの使い方に身に着けるようにいたします。 有難うございます、感謝感謝です。
guest

0

リストボックスの height は、ウィジェットのサイズではなく要素数になります。
キャンバスやフレームに指定する widget, height とは一致しません。
width も同様に、横幅だったり入力文字数のウィジェットがあるので注意。

解決方法:
(2) のコードでも (1) と同様に place ではなく grid で配置してみて下さい。
キャンバスの有無ではなく、設置方法の問題です。

投稿2021/02/24 02:44

teamikl

総合スコア8664

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

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

退会済みユーザー

退会済みユーザー

2021/02/24 04:14

有難うございました。 Daregadaさんのやり方で対応いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問