def __init__(self, root, nlists=2): assert nlists >= 1 self.root = root self.nlists = nlists self.path = [] # create top self.top = top = ListedToplevel(root) top.protocol("WM_DELETE_WINDOW", self.close) top.bind("<Escape>", self.close) self.settitle() # create frames and separators in between self.frames = [] self.separators = [] last = top for i in range(nlists - 1): sepa = HSeparator(last) self.separators.append(sepa) frame, last = sepa.parts() self.frames.append(frame) self.frames.append(last) # create labels and lists self.labels = [] self.lists = [] for i in range(nlists): frame = self.frames[i] label = Label(frame, text=self.subtitle(i), relief="groove", borderwidth=2) label.pack(fill="x") self.labels.append(label) list = ScrolledList(frame, width=self.width(i), height=self.height(i)) self.lists.append(list) list.on_select = \ lambda index, i=i, self=self: self.on_select(index, i) list.on_double = \ lambda index, i=i, self=self: self.on_double(index, i) # fill leftmost list (rest get filled on demand) self.fill(0) # XXX one after_idle isn't enough; two are... top.after_idle(self.call_pack_propagate_1)
# One or more ScrolledLists with HSeparators between them.