I am in the middle of writing my first big app. I am having trouble with the layout of the frames and buttons. In particular, just one frame. I'll post the code and you can compile it and see what I am talking about. But, when you do there is a red frame with the button "Define" in it. I want this frame to be below the yellow and green frame. It has to be a child frame of a certain parent frame. I can make it work if it is not in that certain parent frame, but can't seem to when it is. Here's the code, and Ill give some additional info at the bottom.
from Tkinter import* #Now for the class that gets the definitions from get_defs import* class App: def __init__(self, parent): self.parent = parent self.parent.geometry("500x250") #----------------------------Contstants for Buttons------------ button_padx = "2m" button_pady = "1m" #--------------------------end constants----------------------- self.baseContainer = Frame(self.parent) self.baseContainer.pack(side=TOP, fill = BOTH, expand=NO) #the Top Frame with all the buttons self.topContainer = Frame(self.baseContainer, bg="purple") self.topContainer.pack(side=TOP, expand=YES, ipadx=5, ipady=5, fill = X, anchor=N) #the frame with the main things the user will use self.mainContainer = Frame(self.baseContainer, bg="blue") self.mainContainer.pack(side=TOP, ipadx = 5, ipady = 5, anchor=CENTER, expand=YES, fill=BOTH) #---------------------Top Buttons----------------------------- #WORD LIST BUTTON------------------ self.wordListButton = Button(self.topContainer, padx=button_padx, pady=button_pady) self.wordListButton.configure(text="Word List", command=self.define_Frame) self.wordListButton.pack(side=LEFT) #END WORD LIST BUTTON--------------- #DEFINITIONS BUTTON----------------- self.definitionsButton = Button(self.topContainer, padx=button_padx, pady=button_pady, command = self.defs_Frame) self.definitionsButton.configure(text="Definitions") self.definitionsButton.pack(side=LEFT) #END DEFINITIONS BUTTON-------------- def destroyMainChildren(self): #This will make sure taht when a button is pushed for a new set of frames #that everything will go smoothly. for widget in self.mainContainer.pack_slaves(): widget.destroy() def destroyDefButFrame(self): #The define it button is under a different frame than main frame #so this is another way of killing it. for widget in self.defineButtonF.pack_slaves(): widget.destroy() self.defineButtonF.destroy() def defs_Frame(self): #Destroy main's children self.destroyMainChildren() self.destroyDefButFrame() optionsFrame = Frame(self.mainContainer, bg="red") optionsFrame.pack(side=TOP, expand=YES, ipadx=5, ipady=5, fill = X, anchor=N) #---------------------DEFINE FRAME------------------------ #This frame is the frame that has all the entry widgets, it is called #the define frame. when you hit the "wordListButton" this should come up def define_Frame(self): #Destroy all child widgets self.destroyMainChildren() myMessage="Please type in all the words that you would like to define" Label(self.mainContainer, text=myMessage, justify=LEFT).pack(side=TOP, anchor=N) #The LEFT Frame that comes up when you hit define self.defineContainer1 = Frame(self.mainContainer, bg="green") self.defineContainer1.pack(side=LEFT, ipadx = 5, ipady = 5, expand=YES, fill=BOTH) #The RIGHT Frame that comes up when you hit define self.defineContainer2 = Frame(self.mainContainer, bg="yellow") self.defineContainer2.pack(side=LEFT, ipadx=5, ipady=5, expand=YES, fill=BOTH) #This frame is where the define button goes self.defineButtonF = Frame(self.mainContainer, bg="red") self.defineButtonF.pack(side=BOTTOM, anchor=S, ipady=5, ipadx=5, fill=BOTH, expand=YES) #----------------------------Contstants for Buttons------------ self.button_padx = "2m" self.button_pady = "1m" #--------------------------end constants----------------------- #----------------------STUFF FOR DEFINE FRAME------------------------- self.e1 = Entry(self.defineContainer1) self.e1.pack(fill=X) self.e2 = Entry(self.defineContainer1) self.e2.pack(fill=X) self.e3 = Entry(self.defineContainer1) self.e3.pack(fill=X) self.e4 = Entry(self.defineContainer1) self.e4.pack(fill=X) self.e5 = Entry(self.defineContainer1) self.e5.pack(fill=X) self.e6 = Entry(self.defineContainer1) self.e6.pack(fill=X) self.e7 = Entry(self.defineContainer1) self.e7.pack(fill=X) self.e8 = Entry(self.defineContainer2) self.e8.pack(fill=X) self.e9 = Entry(self.defineContainer2) self.e9.pack(fill=X) self.e10 = Entry(self.defineContainer2) self.e10.pack(fill=X) self.e11 = Entry(self.defineContainer2) self.e11.pack(fill=X) self.e12 = Entry(self.defineContainer2) self.e12.pack(fill=X) self.e13 = Entry(self.defineContainer2) self.e13.pack(fill=X) self.e14 = Entry(self.defineContainer2,) self.e14.pack(fill=X) self.listBuffer=[self.e1, self.e2, self.e3, self.e4, self.e5, self.e6, self.e7, self.e8, self.e9, self.e10, self.e11, self.e12, self.e13, self.e14] self.wordList=['None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None'] self.finalWords=[] self.definition1=[] self.definition2=[] self.definition3=[] self.definition4=[] self.definition5=[] self.definition6=[] self.definition7=[] self.definition8=[] self.definition9=[] self.definition10=[] self.definition11=[] self.definition12=[] self.definition13=[] self.definition14=[] self.definitionsList=[self.definition1, self.definition2, self.definition3, self.definition4, self.definition5, self.definition6, self.definition7, self.definition8, self.definition9, self.definition10, self.definition11, self.definition12, self.definition13, self.definition14] self.bufferList = [] #-------------------------Define Button Stuff------------------------- #Define it button self.defineIt= Button(self.defineButtonF, command=self.DefineClick) self.defineIt.configure(text="Define!") self.defineIt.bind("<Return>", self.DefineClickE) self.defineIt.pack(side=TOP, anchor=N, padx=self.button_padx, pady=self.button_pady,) def DefineClickE(self, event): print "Define was hit with Enter" self.DefineClick() def DefineClick(self): print "Define was activated." self.getWords() def getWords(self): self.n=0 for entry in self.listBuffer: self.wordList[self.n] = entry.get() self.n=self.n + 1 for item in self.wordList: if item != '': self.finalWords.append(item) #wordList is the list of all the words, entered or not #print self.wordList #finalWords is the list of words refined, with just the ones the user typed #print self.finalWords #----------------------------END DEFINE BUTTON STUFF---------------------- #------------------------------------------------------------------------- #-----------END OF EVERYTHING FOR THE DEFINE FRAMES----------- #------------------------------------------------------------------------- root = Tk() app = App(root) root.mainloop() there is a button towards the bottom called the defineIt button. this is the button in the red frame. If you look right above the big comment called constants for buttons, that frame called definebuttonF is the red frame. I need the parent to be the mainContainer frame. However, if you make it the baseContainer frame. that is what I want it to look like. See if you can make it work. I haven't been able to yet. I know this may seem like it would take a while; but I really would like it if someone helped. -- View this message in context: http://www.nabble.com/Issue-with-the-layout-of-a-frame-tp18252118p18252118.html Sent from the Python - tkinter-discuss mailing list archive at Nabble.com. _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss