To solve this optimization problem, we first need to define the decision variables, the objective function, and the constraints.

Let's denote:
- $x$ as the number of t-shirts produced,
- $y$ as the number of hoodies produced.

The objective is to maximize profit. Each t-shirt nets $10 in profit, and each hoodie nets $15 in profit. Thus, the objective function can be written as:
\[ \text{Maximize: } 10x + 15y \]

Now, let's define the constraints based on the given information:

1. **Designing Time Constraint**: T-shirts require 1 hour of designing time, and hoodies require 2 hours of designing time. The designers are available for 40 hours a week.
\[ x + 2y \leq 40 \]

2. **Printing Time Constraint**: T-shirts require 2 hours of printing time, and hoodies require 3 hours of printing time. The printing machine is available for 60 hours per week.
\[ 2x + 3y \leq 60 \]

3. **Non-Negativity Constraints**: Both $x$ and $y$ must be non-negative since the company cannot produce a negative number of items.
\[ x \geq 0, y \geq 0 \]

Given these constraints and the objective function, we can now formulate this problem in Gurobi using Python:

```python
from gurobipy import *

# Create a new model
m = Model("Clothing_Collection")

# Define the decision variables
x = m.addVar(lb=0, name="t_shirts")  # Number of t-shirts
y = m.addVar(lb=0, name="hoodies")   # Number of hoodies

# Set the objective function: Maximize profit
m.setObjective(10*x + 15*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x + 2*y <= 40, name="designing_time")  # Designing time constraint
m.addConstr(2*x + 3*y <= 60, name="printing_time")  # Printing time constraint

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of t-shirts: {x.x}")
    print(f"Number of hoodies: {y.x}")
    print(f"Maximum profit: ${10*x.x + 15*y.x:.2f}")
else:
    print("No optimal solution found")

```