Johnny Gaudreau, T.J. Brodie and Mikael Backlund scored for the Flames (36-26-7).
Tkachuk has nine points in his last six games.
Cam Talbot made 32 saves for the win in his third straight start and 300th of his career.
Taylor Hall had a goal and an assist and Carl Soderberg also scored for Arizona (33-28-8).
Arizona starter Darcy Kuemper stopped 31 shots in the loss.
The Flames improved to 6-3-1 in their last 10 games.
Calgary moved to three points back of the Vegas Golden Knights, who top the Pacific Division, and one point behind the idle Edmonton Oilers in second spot.
The Flames are at home Sunday to the Knights, who were 4-0 losers to the Winnipeg Jets on Friday.
The Coyotes, who face the Jets on Monday, were among five teams within two points of each other jockeying for wild-card berths in the Western Conference.
Coyotes centre Nick Schmaltz got the puck behind Talbot with just over three minutes left in the game, but missed the open net.
Talbot then lost his helmet in a collision with Coyotes forward Conor Garland when both lunged for the loose puck.
Soderberg pulled the visitors within a goal at 10:57 of the second period.
The Swede dove on a loose puck trickling between Talbot’s pads and shovelled it over the goal-line.
Backlund made it 3-1 for the Flames at 4:17 on a give-and-go with Andrew Mangiapane.
Backlund swept the puck from the high slot into the net’s corner on Kuemper’s stick side.
The Coyotes scored on their first shot of the game at 1:11 of the opening period, but the Flames countered with a pair of goals in a 41-second span starting at 5:54.
With teammate Backlund providing a screen, Brodie scored his third goal in as many games threading a wrist shot through traffic over Kuemper’s shoulder at 6:35.
Gaudreau capped a passing play with Sean Monahan and Tkachuk scoring on a wrist shot for a power-play goal at 5:54.
Hall dished a backhand to Clayton Keller just inside the blue-line and converted the return pass into a goal from the face-off circle.