水平和垂直滾動 Canvas 小部件

原理與 Text 小部件基本相同,但是 Grid 佈局用於將滾動條放在小部件周圍。

canvas = tk.Canvas(parent, width=150, height=150)
canvas.create_oval(10, 10, 20, 20, fill="red")
canvas.create_oval(200, 200, 220, 220, fill="blue")
canvas.grid(row=0, column=0)

scroll_x = tk.Scrollbar(parent, orient="horizontal", command=canvas.xview)
scroll_x.grid(row=1, column=0, sticky="ew")

scroll_y = tk.Scrollbar(parent, orient="vertical", command=canvas.yview)
scroll_y.grid(row=0, column=1, sticky="ns")

canvas.configure(yscrollcommand=scroll_y.set, xscrollcommand=scroll_x.set)

與 Text 小部件不同,Canvas 的可滾動區域在其內容被修改時不會自動更新,因此我們需要定義它並使用 scrollregion 引數手動更新它:

canvas.configure(scrollregion=canvas.bbox("all"))

canvas.bbox("all") 返回適合整個畫布內容的矩形座標。