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