Q:

What's the difference between these two functions in Tkinter?

Why are these two functions different?
    def other_entry1(self, selection, row, el, var):
        if selection == "Other":
            var = StringVar()
            el = Entry(self.frame1, textvariable=var)
            el.grid(row=row, column=6)
    #Calling it as part of an optionMenu
    self.e33 = OptionMenu(self.frame1, self.ea_tf, *fixtures, command= lambda selection:self.other_entry1(selection,15, self.e33, self.ea_tf))

The other one:
    def other_entry2(self, selection):
        if selection == "Other":
            self.ea_tf = StringVar()
            self.e33 = Entry(self.frame1, textvariable=self.ea_tf)
            self.e33.grid(row=15, column=6)

    #Calling it in an optionMenu
    self.e33 = OptionMenu(self.frame1, self.ea_tf, *fixtures, command=self.other_entry2)

I would like to be able to call the first function several times and just tell it what entry box to create instead of making several separate functions.
Edit: Isn't the second function just skipping the step of substituting in the arguments?

A:

self.s33 is reference to OptionMenu
Second function overwrite self.e33 by reference to Entry and you can't use self.e33 to get access to OptionMenu.
First function copy reference from self.s33 to el then overwrites el by reference to Entry but you can still use self.s33 to get access to OptionMenu 
See simple example using "Visual Execution" on PythonTutor.com: 
Use link to open page with example, click "Visual Execution" and then you can use "Forward" button to see step by step how example works

function 1
function 2

You can use first function to create several Entry but you don't need to send self.e33 and self.ea_tf because function will not use it.
You get the same result as
def other_entry1(self, selection, row):
    if selection == "Other":
        var = StringVar()
        Entry(self.frame1, textvariable=var).grid(row=row, column=6)

#Calling it as part of an optionMenu
self.e33 = OptionMenu(self.frame1, self.ea_tf, *fixtures, command=lambda selection:self.other_entry1(selection,15))

problem is with access to Entry or StringVar() to get value from Entry
self.all_vars = {} # dictionary

def other_entry1(self, selection, row):
    if selection == "Other":
        self.all_vars[row] = StringVar()
        Entry(self.frame1, textvariable=self.all_vars[row]).grid(row=row, column=6)

#Calling it as part of an optionMenu
self.e33 = OptionMenu(self.frame1, self.ea_tf, *fixtures, command=lambda selection:self.other_entry1(selection,15))

# another place

row = 15
print "row:", row
print "value in Entry:", self.all_vars[row].get()

EDIT: working example
#!/usr/bin/env python

from Tkinter import *

class App():

    def __init__(self, master):
        self.master = master

        self.all_entries = {} # empty dictionary
        self.all_entries_vars = {} # empty dictionary

        self.all_optionmenus = {} # empty dictionary
        self.all_optionmenus_vars = {} # empty dictionary

        fixtures = ["One", "Two", "Tree", "Other"]

        # create 5 options menu
        for i in range(5):
            self.all_optionmenus_vars[i] = StringVar()
            self.all_optionmenus_vars[i].set("One")

            self.all_optionmenus[i] = OptionMenu(self.master, self.all_optionmenus_vars[i], *fixtures, command=lambda selection, col=i:self.addEntry(selection, col))
            self.all_optionmenus[i].grid(row=1, column=i)

        Button(master, text="Print OptionMenus Vars", command=self.printOptionMenus).grid(row=2, column=0, columnspan=5)
        Button(master, text="Print Entries Vars", command=self.printEntries).grid(row=3, column=0, columnspan=5)

    def run(self):
        self.master.mainloop()

    def addEntry(self, selection, col):

        if selection == "Other":

            # if Entry was created before
            if col in self.all_entries:
                # show existing Entry
                self.all_entries[col].grid(row=0, column=col)
            else:
                # create new Entry
                self.all_entries_vars[col] = StringVar()
                self.all_entries[col] = Entry(self.master, textvariable=self.all_entries_vars[col])
                self.all_entries[col].grid(row=0, column=col)

        # if Entry was created before
        elif col in self.all_entries:
            # hide Entry
            self.all_entries[col].grid_forget()

    def printEntries(self):
        print "-"*30
        for key in self.all_entries_vars:
            print "Entry #%d: %s" % ( key, self.all_entries_vars[key].get() )

    def printOptionMenus(self):
        print "-"*30
        for key in self.all_optionmenus_vars:
            print "OptionMenu #%d: %s" % ( key, self.all_optionmenus_vars[key].get() )

#----------------------------------------------------------------------

if __name__ == '__main__':
    App(Tk()).run()

