To solve this problem, we first need to define the decision variables and the objective function. Let's denote the number of chocolate croissants as \(x\) and the number of strawberry croissants as \(y\).

The profit per unit for each type of croissant is given:
- Profit per chocolate croissant: $4
- Profit per strawberry croissant: $6

The cost per unit for baking each type of croissant is also provided:
- Cost per chocolate croissant: $3
- Cost per strawberry croissant: $5

We are also given two constraints:
1. The total number of croissants sold in a month should not exceed 1200 units.
2. The total expenditure on baking these croissants should not exceed $6000.

The objective is to maximize the total profit, which can be represented as:
\[ \text{Maximize:} \quad 4x + 6y \]

Subject to the constraints:
1. \( x + y \leq 1200 \) (Total croissants constraint)
2. \( 3x + 5y \leq 6000 \) (Budget constraint)

Additionally, since we cannot produce a negative number of croissants, we have non-negativity constraints:
\[ x \geq 0, y \geq 0 \]

To solve this problem using Gurobi in Python, we can use the following code:

```python
from gurobipy import *

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

# Define the decision variables
x = m.addVar(lb=0, name="chocolate_croissants")
y = m.addVar(lb=0, name="strawberry_croissants")

# Set the objective function to maximize profit
m.setObjective(4*x + 6*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x + y <= 1200, "total_croissants")
m.addConstr(3*x + 5*y <= 6000, "budget")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Chocolate Croissants: {x.x}")
    print(f"Strawberry Croissants: {y.x}")
    print(f"Total Profit: ${4*x.x + 6*y.x}")
else:
    print("No optimal solution found")

```