title: Tkinter Class structure (class per frame) issue with duplicating widgets
body: <p>Ive been trying out OOP for use with Tkinter - Im getting there (I think) slowly...</p>
  
  <p>I wanted to build a structure where each frame is handled by its own class, including all of its widgets and functions. Perhaps I am coming from the wrong angle but that is what makes most logical sense to me. - Feel free to tell me if you agree / disagree!</p>
  
  <p>I know why the problem is happening - when im calling each class my <code>__init__</code> runs everytime and builds the relevant widgets regardless of whether they are already present in the frame. However, the only way I can think of getting round this would be to build each frame in the <code>__init__</code> of my primary class <code>GUI_Start</code>. - Although this seems like a messy and un-organised soloution to the problem. </p>
  
  <p>Is there a way I can achieve a structure where each class takes care of its own functions and widgets but doesn't build the frame each time?</p>
  
  <p>See below for minimal example of the issue:</p>
  
  <pre><code>from Tkinter import *
  
  class GUI_Start:
  
      def __init__(self, master):
          self.master = master
          self.master.geometry('300x300')
          self.master.grid_rowconfigure(0, weight=1)
          self.master.grid_columnconfigure(0, weight=1)
          self.win_colour = '#D2B48C'
          self.frames = {}
  
          for window in ['win1', 'win2']:
              frame = Frame(self.master, bg=self.win_colour, bd=10, relief=GROOVE)
              frame.grid(row=0, column=0, sticky='news')
              setattr(self, window, frame)
              self.frames[window] = frame
  
          Page_1(self.frames)
  
      def Next_Page(self, frames, controller):
          controller(frames)
  
  
  class Page_1(GUI_Start):
  
      def __init__(self, master):
          self.master = master
          self.master['win1'].tkraise()
  
          page1_label = Label(self.master['win1'], text='PAGE 1')
          page1_label.pack(fill=X)
  
          page1_button = Button(self.master['win1'], text='Visit Page 2...', command=lambda: self.Next_Page(self.master, Page_2))
          page1_button.pack(fill=X, side=BOTTOM)
  
  
  class Page_2(GUI_Start):
  
      def __init__(self, master):
          self.master = master
          self.master['win2'].tkraise()
  
          page2_label = Label(self.master['win2'], text='PAGE 2')
          page2_label.pack(fill=X)
  
          page2_button = Button(self.master['win2'], text='Back to Page 1...', command=lambda: self.Next_Page(self.master, Page_1))
          page2_button.pack(fill=X, side=BOTTOM)
  
  
  root = Tk()
  gui = GUI_Start(root)
  root.mainloop()
  </code></pre>
  
  <p>Feel free to critique the structure as I may be trying to approach this from the wrong angle!</p>
  
  <p>Any feedback would be much appreciated!
  Luke</p>