前提・実現したいこと
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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/02/24 04:08