from Tkinter import *

class MultiStatusBar(Frame):
	
	def __init__(self, master=None, **kw):
		if master is None:
			master = Tk()
		apply(Frame.__init__, (self, master), kw)
		self.labels = {}

	def set_label(self, name, text='', side=LEFT):
		if not self.labels.has_key(name):
			label = Label(self, bd=1, relief=SUNKEN, anchor=W)
			label.pack(side=side)
			self.labels[name] = label
		else:
			label = self.labels[name]
		label.config(text=text)

def _test():
	b = Frame()
	c = Text(b)
	c.pack(side=TOP)
	a = MultiStatusBar(b)
	a.set_label("one", "hello")
	a.set_label("two", "world")
	a.pack(side=BOTTOM, fill=X)
	b.pack()
	b.mainloop()

if __name__ == '__main__':
	_test()
