The square outside the Santa Croce basilica became a sea of rainbow peace flags peppered with blue and yellow, the colours of Ukraine’s national flag.
In an address shown on a big screen, Zelensky told the crowd his country was under bombardment “24 hours a day”, targeting schools, hospitals and residential areas, “even churches, even squares like yours”.
According to an Italian translation, he said 79 children had been killed in the conflict so far, saying Europe must “not forget”.
The demonstration was organised by Florence mayor Dario Nardella, also president of the Eurocities network of more than 200 cities across 38 countries.
In France, meanwhile, nearly 10,000 people demonstrated in cities across France to show their support for the people of Ukraine.
Around a thousand gathered in Paris to denounce the Russian invasion, many carrying blue and yellow badges, the colours of the Ukrainian flag. Some carried placards calling for a boycott of Russian oil and gas.
Last weekend, more than 40,000 people turned out across France, including 16,000 in Paris.
Across France, people also came out in force to call for more attention to the climate crisis in the run-up to presidential polls next month.