I learned how to make a scrollable frame by embedding the frame in a canvas and then adding a scrollbar to it like this:
def __add_widget_features(self, feat_tab):table_frame = ttk.Frame(feat_tab)table_frame.pack(fill=BOTH, expand=True)self.__make_grid(table_frame)####subframe#### self.canvas = Canvas(table_frame, borderwidth=0, background="#ffffff")self.frame = LabelFrame(self.canvas, background="#ffffff", text="Timetable")self.vsb = ttk.Scrollbar(table_frame, orient="vertical", command=self.canvas.yview)self.canvas.configure(yscrollcommand=self.vsb.set)self.vsb.pack(side="right", fill="y")self.canvas.pack(side="right", fill="both", expand=True)self.canvas.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame")self.frame.bind("<Configure>", self.OnFrameConfigure)
My program has a gui that creates multiple tabs. The scrollable canvas works great in one tab, but when I try to add the same code to a second a tab, the scrollbar doesn't work on that tab. If I comment out the code block on the first tab, it works fine on the other one. I've already tried naming all of the elements of the second tab something different (in case that was the problem) and I've tried taking out the "self." part of the names but none of that helped. I'm quite new to Python so I'm sure I'm missing something simple. I tried posting a picture of the problem but my rep isn't high enough yet. Any help would be great.
UPDATE: per Brionius's suggestion, here's the function for creating the notebook:
def __add_widget_datawindow(self):'''(FordTIPGui) -> NoneTypePopulate the data_window with widgets.'''# add data_window framedata_frame = ttk.Frame(self.data_window)data_frame.pack(fill=BOTH, expand=True)self.__make_grid(data_frame)self.add_menubar(self.data_window, "other") # add menubar# add subframes and make them into a gridbutton_frame = ttk.Frame(data_frame)button_frame.grid(row=9, column=0, rowspan=1, columnspan=10,sticky=W+E+N+S)self.__make_grid(button_frame)nb_frame = ttk.Frame(data_frame)nb_frame.grid(row=0, column=0, rowspan=9, columnspan=10, sticky=W+E+N+S)## add widgets to subframes ### button_framedisc_button = ttk.Button(button_frame, text="Disconnect", command=lambda:self.disconnect())disc_button.grid(row=10, column=0, columnspan=1, sticky=W+E+N+S)# nb_framenb = ttk.Notebook(nb_frame) # create notebooknb.pack(fill=BOTH, expand=True)# create frames for tabstab_frame1 = ttk.Frame(nb)tab_frame2 = ttk.Frame(nb)tab_frame3 = ttk.Frame(nb)tab_frame4 = ttk.Frame(nb)tab_frame5 = ttk.Frame(nb)self.__make_grid(tab_frame1)self.__make_grid(tab_frame2)self.__make_grid(tab_frame3)self.__make_grid(tab_frame4)self.__make_grid(tab_frame5)# add tabsnb.add(tab_frame1, text='Confidential1 View')nb.add(tab_frame2, text='Confidential2 View')nb.add(tab_frame3, text='Confidential3 View')nb.add(tab_frame4, text='Confidential4 View')nb.add(tab_frame5, text='Confidential5 View')# add widgetsself.__add_widget_group(tab_frame1)self.__add_widget_feature(tab_frame2)self.__add_widget_signal(tab_frame3)self.__add_widget_features(tab_frame4)self.__add_widget_timetable(tab_frame5)
pic of the problem: http://www.use.com/supersize.pl?set=3059c6e412c1416578a7