Home | History | Annotate | Download | only in guido
      1 # Show how to do switchable panels.
      2 
      3 from Tkinter import *
      4 
      5 class App:
      6 
      7     def __init__(self, top=None, master=None):
      8         if top is None:
      9             if master is None:
     10                 top = Tk()
     11             else:
     12                 top = Toplevel(master)
     13         self.top = top
     14         self.buttonframe = Frame(top)
     15         self.buttonframe.pack()
     16         self.panelframe = Frame(top,  borderwidth=2, relief=GROOVE)
     17         self.panelframe.pack(expand=1, fill=BOTH)
     18         self.panels = {}
     19         self.curpanel = None
     20 
     21     def addpanel(self, name, klass):
     22         button = Button(self.buttonframe, text=name,
     23                         command=lambda self=self, name=name: self.show(name))
     24         button.pack(side=LEFT)
     25         frame = Frame(self.panelframe)
     26         instance = klass(frame)
     27         self.panels[name] = (button, frame, instance)
     28         if self.curpanel is None:
     29             self.show(name)
     30 
     31     def show(self, name):
     32         (button, frame, instance) = self.panels[name]
     33         if self.curpanel:
     34             self.curpanel.pack_forget()
     35         self.curpanel = frame
     36         frame.pack(expand=1, fill="both")
     37 
     38 class LabelPanel:
     39     def __init__(self, frame):
     40         self.label = Label(frame, text="Hello world")
     41         self.label.pack()
     42 
     43 class ButtonPanel:
     44     def __init__(self, frame):
     45         self.button = Button(frame, text="Press me")
     46         self.button.pack()
     47 
     48 def main():
     49     app = App()
     50     app.addpanel("label", LabelPanel)
     51     app.addpanel("button", ButtonPanel)
     52     app.top.mainloop()
     53 
     54 if __name__ == '__main__':
     55     main()
     56