The 23-year-old's contract was up at the end of the season and Wenger had said he was worried the ex-Southampton man would leave after top names such as Robin van Persie and Cesc Fabregas quit the Premier League club in the last two years.
"I am very happy to have signed a new contract here at Arsenal. Thanks to everyone for their continued support, especially the manager, everyone at the club and most importantly the fans," Walcott told the club website (www.arsenal.com).
"I have made it clear from the start that I wanted to stay at Arsenal so I am pleased we have agreed a deal that everyone is happy with. What's important now is for the team to realise its potential and win trophies."
Media reports said he had signed a 3-1/2-year deal with the London club, who have not won a trophy since 2005, and his weekly wage would be 100,000 pounds ($159,700).
Some Arsenal fans will wonder if he is worth the money following a series of inconsistent displays in recent years.
However, his move to centre forward last month has so far been a partial success after a spell on the bench amid the contract wrangle.
The speedy and diminutive player scored a hat-trick in the 7-3 home demolition of Newcastle United but has gone missing in other games like the 2-0 home defeat by champions Manchester City last weekend.
He is nevertheless sixth-placed Arsenal's top scorer this term with 14 goals in 24 games in all competitions.
"We are all delighted that Theo has signed a new contract. He joined us as a 16-year-old and since then has developed very well to become an extremely important player for both Arsenal Football Club and England," Wenger added.
"Theo is a strong player and also a great person, and the combination of his ability and pace always make him such a valuable asset either from the flanks or down the middle.
"Theo's contract extension now gives us a strong nucleus of ambitious young players who have committed to the club and want to be successful with us as a group."
Walcott, whose side visit city rivals Chelsea on Sunday, has netted four times in 30 internationals for England. ($1 = 0.6262 British pounds) (Writing by Mark Meadows; Editing by John Mehaffey)