title: GUI layout using Tk Grid Geometry Manager
body: <p>Building a small application for personal use with Python and thought I'd try my hand with a little GUI programming using Tkinter. This is the GUI I've created so far:</p>
  
  <p><img src="https://i.stack.imgur.com/SAVYY.gif" alt="GUI layout using Tkinter"></p>
  
  <p><strong>Application doubts:</strong></p>
  
  <p>How can I make sure that the three LableFrames - A, B and C in the screenshot - have the same width? (Or rather, have the width equal to the widest of the three? For example, in the screenshot, A is the widest and I'd like B and C to also be as wide - up to the line D).</p>
  
  <p>(It doesn't have to dynamically calculated - it is enough if I can ensure that the width are the same when I code it, the first time round. They don't need to change on runtime.)</p>
  
  <p><strong>Tk Grid Geometry Manager doubts</strong>:</p>
  
  <ol>
  <li><p>When you use frames, is the grid (row, column) specific to only the size of the frame or is it calculated based on the size of the form (root window)?</p></li>
  <li><p>How is the size of a column determined in a grid?</p></li>
  <li>I haven't fully understood what 'weight' does within a grid. When should it be used?</li>
  </ol>
  
  <p><strong>The Python GUI Code</strong>:</p>
  
  <pre><code>import Tkinter
  
  if __name__ == '__main__':
      form = Tkinter.Tk()
  
      getFld = Tkinter.IntVar()
  
      form.wm_title('File Parser')
  
      stepOne = Tkinter.LabelFrame(form, text=" 1. Enter File Details: ")
      stepOne.grid(row=0, columnspan=7, sticky='W', \
                   padx=5, pady=5, ipadx=5, ipady=5)
  
      helpLf = Tkinter.LabelFrame(form, text=" Quick Help ")
      helpLf.grid(row=0, column=9, columnspan=2, rowspan=8, \
                  sticky='NS', padx=5, pady=5)
      helpLbl = Tkinter.Label(helpLf, text="Help will come - ask for it.")
      helpLbl.grid(row=0)
  
      stepTwo = Tkinter.LabelFrame(form, text=" 2. Enter Table Details: ")
      stepTwo.grid(row=2, columnspan=7, sticky='W', \
                   padx=5, pady=5, ipadx=5, ipady=5)
  
      stepThree = Tkinter.LabelFrame(form, text=" 3. Configure: ")
      stepThree.grid(row=3, columnspan=7, sticky='W', \
                     padx=5, pady=5, ipadx=5, ipady=5)
  
      inFileLbl = Tkinter.Label(stepOne, text="Select the File:")
      inFileLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2)
  
      inFileTxt = Tkinter.Entry(stepOne)
      inFileTxt.grid(row=0, column=1, columnspan=7, sticky="WE", pady=3)
  
      inFileBtn = Tkinter.Button(stepOne, text="Browse ...")
      inFileBtn.grid(row=0, column=8, sticky='W', padx=5, pady=2)
  
      outFileLbl = Tkinter.Label(stepOne, text="Save File to:")
      outFileLbl.grid(row=1, column=0, sticky='E', padx=5, pady=2)
  
      outFileTxt = Tkinter.Entry(stepOne)
      outFileTxt.grid(row=1, column=1, columnspan=7, sticky="WE", pady=2)
  
      outFileBtn = Tkinter.Button(stepOne, text="Browse ...")
      outFileBtn.grid(row=1, column=8, sticky='W', padx=5, pady=2)
  
      inEncLbl = Tkinter.Label(stepOne, text="Input File Encoding:")
      inEncLbl.grid(row=2, column=0, sticky='E', padx=5, pady=2)
  
      inEncTxt = Tkinter.Entry(stepOne)
      inEncTxt.grid(row=2, column=1, sticky='E', pady=2)
  
      outEncLbl = Tkinter.Label(stepOne, text="Output File Encoding:")
      outEncLbl.grid(row=2, column=5, padx=5, pady=2)
  
      outEncTxt = Tkinter.Entry(stepOne)
      outEncTxt.grid(row=2, column=7, pady=2)
  
      outTblLbl = Tkinter.Label(stepTwo, \
            text="Enter the name of the table to be used in the statements:")
      outTblLbl.grid(row=3, column=0, sticky='W', padx=5, pady=2)
  
      outTblTxt = Tkinter.Entry(stepTwo)
      outTblTxt.grid(row=3, column=1, columnspan=3, pady=2, sticky='WE')
  
      fldLbl = Tkinter.Label(stepTwo, \
                             text="Enter the field (column) names of the table:")
      fldLbl.grid(row=4, column=0, padx=5, pady=2, sticky='W')
  
      getFldChk = Tkinter.Checkbutton(stepTwo, \
                             text="Get fields automatically from input file",\
                             onvalue=1, offvalue=0)
      getFldChk.grid(row=4, column=1, columnspan=3, pady=2, sticky='WE')
  
      fldRowTxt = Tkinter.Entry(stepTwo)
      fldRowTxt.grid(row=5, columnspan=5, padx=5, pady=2, sticky='WE')
  
      transChk = Tkinter.Checkbutton(stepThree, \
                 text="Enable Transaction", onvalue=1, offvalue=0)
      transChk.grid(row=6, sticky='W', padx=5, pady=2)
  
      transRwLbl = Tkinter.Label(stepThree, \
                   text=" =&gt; Specify number of rows per transaction:")
      transRwLbl.grid(row=6, column=2, columnspan=2, \
                      sticky='W', padx=5, pady=2)
  
      transRwTxt = Tkinter.Entry(stepThree)
      transRwTxt.grid(row=6, column=4, sticky='WE')
  
      form.mainloop()
  </code></pre>
  
  <p>(Note: For Python 2.4.3)</p>