title: Tkinter displaying button instead of Label
body: <p>I am creating a little app that will take in details from the user about a bank transaction and then display it in a table. 
  I am currently using a CSV file to store the data and then when a new piece of data is put in, it will display that too. </p>
  
  <p>I have a list of labels and then a button at the bottom of them to submit new entry. The problem I am getting is when the length of the table exceeds what it was to begin with there is a display error. </p>
  
  <pre><code>class accountant(tk.Frame):
      def __init__(self, master=None):
          tk.Frame.__init__(self, master)
          master.title("Accountant")
          self.pack()
          self.numIncoming = 0
          self.numOutgoing = 0
          self.incoming = fs.fileStore("incoming", "csv")
          print("log: incoming.csv opened sucessfully")
          self.outgoing = fs.fileStore("outgoing", "csv")
          print("log: outgoing.csv opened sucessfully")
          self.setup()
  
      def setup(self):
  
  
          self.paint()
          self.incomingData()
  
          self.outgoingData()
  
          self.newEntryButtons()
  
  
  
  
      def paint(self): 
          tk.Label(self, width=45, text="incoming").grid(row=1, column=0, columnspan=45)
          tk.Label(self, width=45, text="outgoing").grid(row=1, column=45, columnspan=45)
  
          tk.Label(self, width=15, text="Date").grid(row=2, column=0, columnspan=15)
          tk.Label(self, width=15, text="Transaction Name").grid(row=2, column=15, columnspan=15)
          tk.Label(self, width=15, text="Amount").grid(row=2, column=30, columnspan=15)
  
          tk.Label(self, width=15, text="Date").grid(row=2, column=45, columnspan=15)
          tk.Label(self, width=15, text="Transaction Name").grid(row=2, column=60, columnspan=15)
          tk.Label(self, width=15, text="Amount").grid(row=2, column=75, columnspan=15)
  
      def incomingData(self):
          self.incoming.closeFile()
          self.incoming.openFile()
  
          i = 3
          for cell in self.incoming.reader:
          #cell[0] = Date, cell[1]= Transaction Name, cell[2] =amount
              tk.Label(self, width=15, text=cell[0]).grid(row=i, column=0, columnspan=15)
              tk.Label(self, width=15, text=cell[1]).grid(row=i, column=15, columnspan=15)
              tk.Label(self, width=15, text=cell[2]).grid(row=i, column=30, columnspan=15)
              i += 1
  
          self.numIncoming = i
          print("incoming:", self.numIncoming-3)  
          print("outgoing:", self.numOutgoing-3)
  
  
      def outgoingData(self):
          self.outgoing.closeFile()
          self.outgoing.openFile()
          i = 3
          for cell in self.outgoing.reader:
          #cell[0] = Date, cell[1]= Transaction Name, cell[2] =amount
              tk.Label(self, width=15, text=cell[0]).grid(row=i, column=45, columnspan=15)
              tk.Label(self, width=15, text=cell[1]).grid(row=i, column=60, columnspan=15)
              tk.Label(self, width=15, text=cell[2]).grid(row=i, column=75, columnspan=15)
              i += 1
          self.numOutgoing = i
          print("incoming:", self.numIncoming-3)
          print("outgoing:", self.numOutgoing-3, '\n\n')
  
  
  
      def newEntryButtons(self):
          if(self.numIncoming &lt; self.numOutgoing):
              tk.Button(self, text="new incoming", width=45, command=lambda: self.newEntry(self.incoming)).grid(row=self.numOutgoing, column=0, columnspan=45)
              tk.Button(self, text="new outgoing", width=45, command=lambda: self.newEntry(self.outgoing)).grid(row=self.numOutgoing, column=45, columnspan=45)
          else:
              tk.Button(self, text="new incoming", width=45, command=lambda: self.newEntry(self.incoming)).grid(row=self.numIncoming, column=0, columnspan=45)
              tk.Button(self, text="new outgoing", width=45, command=lambda: self.newEntry(self.outgoing)).grid(row=self.numIncoming, column=45, columnspan=45)
  
      def newEntry(self, inFile):
          win = tk.Toplevel()
  
          self.newName = tk.StringVar()
          self.newDate = tk.StringVar()
          self.newAmount = tk.StringVar()
  
  
          tk.Label(win, width=5, text="Name:").grid(row=0, column=0, columnspan=5)
          tk.Entry(win, textvariable=self.newName).grid(row=0, column=5, columnspan=5)
  
          tk.Label(win, width=5, text="date:").grid(row=1, column=0, columnspan=5)
          tk.Entry(win, textvariable = self.newDate).grid(row=1, column=5, columnspan=5)
  
          tk.Label(win, width=5, text="amount: £").grid(row=2, column=0, columnspan=5)
          tk.Entry(win, textvariable=self.newAmount).grid(row=2, column=5, columnspan=5)
  
          button = tk.Button(win, text="submit", width=5, command= lambda: self.submit(win, inFile))
          button.grid(row=5, column=5, columnspan=5)
  
      def submit(self, win, inFile):
          with open(inFile.file, 'a') as f:
              string= '\n'+self.newName.get() + ',' + self.newDate.get() + ',' + self.newAmount.get()
              f.write(string)
          if inFile.fileName == "incoming":
              self.numIncoming += 1
          #   print("incoming:", self.numIncoming-3)
          #   print("outgoing:", self.numOutgoing-3)
          else:
              self.numOutgoing += 1
              print("outgoing:", self.numOutgoing-3)
          win.destroy()
          self.setup()
  </code></pre>
  
  <p>filestore is just a class that basically opens the csv using 
  <code>reader = csv.reader(open(file+'.'fileExt))</code> where file and fileExt are the parameters passed in. </p>
  
  <p>Here is the image after a new entry. the bottom two buttons should stay as they are and the top two should be d    e    f  in the left column and just whitespace in the right column
  <img src="https://i.stack.imgur.com/H8r9M.jpg" alt="Image after new entry"></p>