| # Show how to do switchable panels. |
| |
| from Tkinter import * |
| |
| class App: |
| |
| def __init__(self, top=None, master=None): |
| if top is None: |
| if master is None: |
| top = Tk() |
| else: |
| top = Toplevel(master) |
| self.top = top |
| self.buttonframe = Frame(top) |
| self.buttonframe.pack() |
| self.panelframe = Frame(top, borderwidth=2, relief=GROOVE) |
| self.panelframe.pack(expand=1, fill=BOTH) |
| self.panels = {} |
| self.curpanel = None |
| |
| def addpanel(self, name, klass): |
| button = Button(self.buttonframe, text=name, |
| command=lambda self=self, name=name: self.show(name)) |
| button.pack(side=LEFT) |
| frame = Frame(self.panelframe) |
| instance = klass(frame) |
| self.panels[name] = (button, frame, instance) |
| if self.curpanel is None: |
| self.show(name) |
| |
| def show(self, name): |
| (button, frame, instance) = self.panels[name] |
| if self.curpanel: |
| self.curpanel.pack_forget() |
| self.curpanel = frame |
| frame.pack(expand=1, fill="both") |
| |
| class LabelPanel: |
| def __init__(self, frame): |
| self.label = Label(frame, text="Hello world") |
| self.label.pack() |
| |
| class ButtonPanel: |
| def __init__(self, frame): |
| self.button = Button(frame, text="Press me") |
| self.button.pack() |
| |
| def main(): |
| app = App() |
| app.addpanel("label", LabelPanel) |
| app.addpanel("button", ButtonPanel) |
| |
| if __name__ == '__main__': |
| main() |