from Tkinter import * class Outline: def __init__(self, root=None): if not root: import Tkinter root = Tkinter._default_root if not root: root = top = Tk() else: top = Toplevel(root) top.wm_title("Outline") self.canvas = canvas = Canvas(top, width=400, height=300, borderwidth=2, relief="sunken", background="#FFBBBB") canvas.pack(expand=1, fill="both") self.items = [] def additem(self, level, open, label): x = 15*level + 5 y = 15*len(self.items) + 5 if open: id1 = self.canvas.create_polygon(x+3, y+3, x+13, y+3, x+8, y+8, outline="black", fill="green") else: id1 = self.canvas.create_polygon(x+3, y+4, x+7, y+8, x+3, y+12, outline="black", fill="red") w = Entry(self.canvas, borderwidth=0, background="#FFBBBB", width=0) w.insert("end", label) id2 = self.canvas.create_window(x+15, y, anchor="nw", window=w) self.items.append((level, open, label, id1, w, id2)) def main(): o = Outline() o.additem(0, 1, "hello world") o.additem(1, 0, "sub1") o.additem(1, 1, "sub2") o.additem(2, 0, "sub2.a") o.additem(2, 0, "sub2.b") o.additem(1, 0, "sub3") main()