水平和垂直滚动 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")
返回适合整个画布内容的矩形坐标。