Tkinter: Frames in nested classes?

Joshua Weage weage98 at yahoo.com
Fri Jul 13 15:59:06 EDT 2001


Following up to my own message, here is the solution (as done in Tkinter.py):

from Tkinter import *

def _flatten(tuple):
        res = ()
        for item in tuple:
                if type(item) in (TupleType, ListType):
                        res = res + _flatten(item)
                elif item is not None:
                        res = res + (item,)
        return res

def _cnfmerge(cnfs):
        if type(cnfs) is DictionaryType:
                return cnfs
        elif type(cnfs) in (NoneType, StringType):
                return cnfs
        else:
                cnf = {}
                for c in _flatten(cnfs):
                        try:
                                cnf.update(c)
                        except (AttributeError, TypeError), msg:
                                print "_cnfmerge: fallback due to:", msg
                                for k, v in c.items():
                                        cnf[k] = v
                return cnf

class Frame1(Frame):
        def __init__(self, master=None, cnf={}, **kw):
                cnf = _cnfmerge((cnf,kw))
                Frame.__init__(self, master, cnf)
                Label(self,text="frame1").pack()
                self.frame = Frame2(self,borderwidth=5,relief="groove")
                self.frame.pack()

class Frame2(Frame):
        def __init__(self,master=None,cnf={},**kw):
                cnf = _cnfmerge((cnf,kw))
                Frame.__init__(self,master,cnf)
                Label(self,text="frame2").pack()
                self.frame = Frame3(self,borderwidth=5,relief="groove")
                self.frame.pack()

class Frame3(Frame):
        def __init__(self,master=None,cnf={},**kw):
                cnf = _cnfmerge((cnf,kw))
                Frame.__init__(self,master,cnf)
                Label(self,text="testing").pack()

root = Tk()

root.title("Temp testing")
root.config(height=200,width=300)

frame1 = Frame1(root,borderwidth=5,relief="groove")
frame1.pack()

root.mainloop()



More information about the Python-list mailing list