@serori7655

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

tkinter canvasをスクロールする方法

解決したいこと

tkinterでcanvasの中にラベルを入れているのですが、多くのラベルを入れているのでscrollbarを使ってすべてのラベルを見られるようにしようとしています。
ですが、スクロースバーの動きがcanvasに反映されません。
解決方法を教えていただきたいです。

該当するソースコード

import tkinter as tk

root = tk.Tk()
root.geometry("300x300")

canvas = tk.Canvas(root, width=300, height=300)
canvas.pack()

sc = tk.Scrollbar(canvas)
sc.pack(side="right", fill="y")
sc.config(command=canvas.yview)
canvas.config(yscrollcommand=sc.set)
canvas.config(scrollregion=(0, 0, 300, 500))


for i in range(0,30):
    lb = tk.Label(canvas, text="ラベル" + str(i))
    lb.pack(side="top", fill="both")

自分で試したこと

canvasの中にフレームを入れてみたり、スクロールバーをcanvas内ではなくrootに設置してみたりと色々試してはいるのですが、うまくいきません。

0 likes

1Answer

Frameを間に入れるのがよさそうです.

Tkinter Canvas & Scrollbar

また,packを使う場合はsideを明示し,同一widgetに対するpackは方向を揃えた方がきれいになります.(tk.TOPとtk.BOTTOMあるいは,tk.LEFTとtk.RIGHT).
同一方向でないと変な所に飛んでいくことがあるので.


import tkinter as tk

root = tk.Tk()
root.geometry("300x300")

canvas = tk.Canvas(root, width=300, height=300)
canvas.pack(side="left")

sc = tk.Scrollbar(root)
sc.pack(side="right", fill="y")
sc.config(command=canvas.yview)
canvas.config(yscrollcommand=sc.set)
canvas.config(scrollregion=(0, 0, 300, 500))

frame = tk.Frame(canvas)
frame.pack(expand=True)
canvas.create_window(0, 0, window=frame, anchor="nw")

for i in range(0, 30):
    lb = tk.Label(frame, text="ラベル" + str(i))
    lb.pack(side="top", fill="both")

root.mainloop()
0Like

Your answer might help someone💌