您的滚动条需要将frame作为父级,而不是Canvas:
from tkinter import *root=Tk()frame=frame(root,width=300,height=300)frame.pack(expand=True, fill=BOTH) #.grid(row=0,column=0)canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500))hbar=Scrollbar(frame,orient=HORIZONTAL)hbar.pack(side=BOTTOM,fill=X)hbar.config(command=canvas.xview)vbar=Scrollbar(frame,orient=VERTICAL)vbar.pack(side=RIGHT,fill=Y)vbar.config(command=canvas.yview)canvas.config(width=300,height=300)canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)canvas.pack(side=LEFT,expand=True,fill=BOTH)root.mainloop()
之所以起作用,是因为它是如何
pack起作用的。默认情况下,它将尝试收缩(或增长)容器以完全适合其子容器。因为在原始示例中滚动条是画布的子级,所以画布会缩小以适合。
如果希望滚动条出现在画布内,诀窍是使用额外的框架。将画布和滚动条放置在此内部框架中,关闭边框的边界,然后打开框架的边界。将框架的背景设置为与画布相同,将显示滚动条在画布内。



