Hi Matt, a possible workaround seems to be to embed the figure's canvas in a second Tk canvas using canvas.create_window(...). The second (embedding) canvas handles the appropriate resizing & scrolling. I have attached a script below to demonstrate. Unfortunately, scrolling is rather sluggish, but it seems to work - the plot is not resized, and you can scroll around to different areas. Does that help?
Cheers Hans On Wed, 31 Aug 2011 22:19:26 +0200, Benjamin Root <ben.r...@ou.edu> wrote: > On Wed, Aug 31, 2011 at 2:55 PM, Matthew Hemke <mghe...@gmail.com> wrote: > >> I have a plot canvas added to a tk interface (python 2.7.2, matplotlib >> 1.0.1) according to the recipe here: >> >> >> http://matplotlib.sourceforge.net/examples/user_interfaces/embedding_in_tk.html >> >> When the window containing the plot is resized the plot shrinks, often >> leading to REALLY ugly, unreadable plots. >> >> I tried adding scrollbars to the canvas returned by get_tk_widget() and >> they connect as expected (using the yview method). Then, I set a >> scrollarea >> config option for the canvas. >> >> Everything seems to be working just like a tkinter canvas, but then when >> the window is resized, the plot still resizes and the scrollbars never >> activate. I was hoping the plot wouldn't resize and the scrollbars would >> activate to allow the user to scroll to see the appropriate part of the >> plot, while still keeping the plot looking pretty. >> >> Is there a way (besides editing backend_tkagg.py self.resize method) >> that >> would allow the scrollbars to work properly? >> >> If my question isn't clear, I can mock up some code, but it may be a bit >> lengthy, so if anyone can steer me in a better direction that would be >> great. >> >> Thanks, >> >> -Matt >> --- start of script --- from Tkinter import Tk, Frame, Canvas, Scrollbar from Tkconstants import NSEW, HORIZONTAL, EW, NS, ALL from matplotlib import pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg def doLargePlot(): from numpy.random import randn matrix = randn(100, 100) plt.pcolor(matrix) def getScrollingCanvas(frame): """ Adds a new canvas with scroll bars to the argument frame NB: uses grid layout @return: the newly created canvas """ frame.grid(sticky=NSEW) frame.rowconfigure(0, weight=1) frame.columnconfigure(0, weight=1) canvas = Canvas(frame) canvas.grid(row=0, column=0, sticky=NSEW) xScrollbar = Scrollbar(frame, orient=HORIZONTAL) yScrollbar = Scrollbar(frame) xScrollbar.grid(row=1, column=0, sticky=EW) yScrollbar.grid(row=0, column=1, sticky=NS) canvas.config(xscrollcommand=xScrollbar.set) xScrollbar.config(command=canvas.xview) canvas.config(yscrollcommand=yScrollbar.set) yScrollbar.config(command=canvas.yview) return canvas if __name__ == "__main__": root = Tk() root.rowconfigure(0, weight=1) root.columnconfigure(0, weight=1) frame = Frame(root) scrollC = getScrollingCanvas(frame) # use more dpi for bigger plot #figure = plt.figure(dpi=200) figure = plt.figure() mplCanvas = FigureCanvasTkAgg(figure, scrollC) canvas = mplCanvas.get_tk_widget() canvas.grid(sticky=NSEW) scrollC.create_window(0, 0, window=canvas) scrollC.config(scrollregion=scrollC.bbox(ALL)) doLargePlot() root.mainloop() --- end of script --- ------------------------------------------------------------------------------ Special Offer -- Download ArcSight Logger for FREE! Finally, a world-class log management solution at an even better price-free! And you'll get a free "Love Thy Logs" t-shirt when you download Logger. Secure your free ArcSight Logger TODAY! http://p.sf.net/sfu/arcsisghtdev2dev _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users