Well. I solved my own problem. Mainly I wasn't using the grid manager everywhere, and I think that's what was messing it up! Thanks anyways!
Al On Mon, Feb 9, 2009 at 12:29 PM, Alexander Grant <a.n.gr...@gmail.com>wrote: > Hi Tutors, > Thanks in advance for all the advice you've already given to others... it > has been extremely useful! > > I'm working on a project, and I wanted to have a header, a footer and an > expanding canvas with (possibly) many widgets inside it. > > I simply modified Fred Lundh's auto-hiding scrollbar code found here - > http://effbot.org/zone/tkinter-autoscrollbar.htm > It is almost working as hoped - but I have the problem that the canvas only > resizes smaller, not larger - even when the canvas is too large to display > in the original window! > > I'll attach my code... I'm just not sure what's going wrong: > > > ################################################# > from Tkinter import * > > class AutoScrollbar(Scrollbar): > # a scrollbar that hides itself if it's not needed. only > # works if you use the grid geometry manager. > def set(self, lo, hi): > if float(lo) <= 0.0 and float(hi) >= 1.0: > # grid_remove is currently missing from Tkinter! > self.tk.call("grid", "remove", self) > else: > self.grid() > Scrollbar.set(self, lo, hi) > def pack(self, **kw): > raise TclError, "cannot use pack with this widget" > def place(self, **kw): > raise TclError, "cannot use place with this widget" > > # > # create scrolled canvas > > al = Tk() > al.columnconfigure(0,weight=1) > al.rowconfigure(0,weight=1) > > header = Frame(al) > header.pack(side= TOP, expand = YES) > > htxt = Label(header,text='TOP TOP TOP... this is the TOP') > htxt.pack() > > footer = Frame(al) > footer.pack(side = BOTTOM, expand = YES) > > ftxt = Label(footer,text='BOTTOM BOTTOM BOTTOM... this is the BOTTOM!') > ftxt.pack() > > root = LabelFrame(al, bd=2, text='Data',relief='groove',padx=5, pady=5) > root.pack(side = TOP, expand = YES) > > vscrollbar = AutoScrollbar(root) > vscrollbar.grid(row=0, column=1, sticky=N+S) > hscrollbar = AutoScrollbar(root, orient=HORIZONTAL) > hscrollbar.grid(row=1, column=0, sticky=E+W) > > canvas = Canvas(root, > yscrollcommand=vscrollbar.set, > xscrollcommand=hscrollbar.set) > canvas.grid(row=0, column=0, sticky=N+S+E+W) > > vscrollbar.config(command=canvas.yview) > hscrollbar.config(command=canvas.xview) > > # make the canvas expandable > root.grid_rowconfigure(0, weight=1) > root.grid_columnconfigure(0, weight=1) > > # create canvas contents > > frame = Frame(canvas) > frame.rowconfigure(1, weight=1) > frame.columnconfigure(1, weight=1) > > rows = 20 > for i in range(1,rows): > for j in range(1,20): > button = Button(frame, padx=7, pady=7, text="[%d,%d]" % (i,j)) > button.grid(row=i, column=j, sticky='news') > > canvas.create_window(0, 0, anchor=NW, window=frame) > > frame.update_idletasks() > > canvas.config(scrollregion=canvas.bbox("all")) > > root.mainloop() > ################################################# > > > > Thanks, > > Al > >
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor