#-*-coding:utf-8-*-
'''
Created on 2015年11月30日
@author: Zroad
'''
from Tkinter import *
class Notebook(object):
def __init__(self, master, side=LEFT):
self.active_fr = None
self.count = 0
self.choice = IntVar(0)
if side in (TOP, BOTTOM):
self.side = LEFT
else:
self.side = TOP
self.rb_fr = Frame(master, borderwidth=2, relief=RIDGE)
self.rb_fr.pack(side=side, fill=BOTH)
self.screen_fr = Frame(master, borderwidth=2, relief=RIDGE)
self.screen_fr.pack(fill=BOTH)
def __call__(self):
return self.screen_fr
def add_screen(self, fr, title):
b = Radiobutton(self.rb_fr, text=title, indicatoron=0, variable=self.choice, value=self.count,
command=lambda:self.display(fr))
b.pack(fill=BOTH, side=self.side)
if not self.active_fr:
fr.pack(fill=BOTH, expand=1)
self.active_fr = fr
self.count += 1
def display(self, fr):
self.active_fr.forget()
fr.pack(fill=BOTH, expand=1)
self.active_fr = fr
if __name__ == "__main__":
root = Tk()
nb = Notebook(root, LEFT)
"""
生成不同的框架(面板),每个都把NB当做"master"
"""
f1 = Frame(nb())
b1 = Button(f1, text = "Button 1")
e1 = Entry(f1)
b1.pack(fill=BOTH, expand=1)
e1.pack(fill=BOTH, expand=1)
f2 = Frame(nb())
b2 = Button(f2, text = "Button 2")
b3 = Button(f2, text = "Beep 2", command = Tk.bell)
b2.pack(fill=BOTH, expand=1)
b3.pack(fill=BOTH, expand=1)
f3 = Frame(nb())
nb.add_screen(f1, "Screen 1")
nb.add_screen(f2, "Screen 2")
nb.add_screen(f3, "dummy")
root.mainloop()
运行结果: