Dave Parker hit a two-run homer and John Candelaria allowed just four hits the first seven innings as Pittsburgh extended host Atlanta's losing streak to six.
The Braves, now in their longest losing streak this season, lost the ninth of their last 11 and fell 2 1/2 games behind the West-leading Dodgers.
Ken Dayley (4-5) took a no-hitter into the sixth, but the Pirates scored three runs to break a 1-1 tie.
Brian Harper drew a one-out walk and Bill Madlock ended the no-hitter with a single to left. Both runners advanced on a wild pitch and Harper scored when Jim Morrison grounded to short. Parker then hit his 10th homer on a 1-2 pitch.
Candelaria (13-8) raised his lifetime record against Atlanta to 11-4 and helped the Pirates end a two-game losing streak. He walked four and struck out three, with Kent Tekulve pitching the last two innings for his 18th save.
Pittsburgh went ahead, 1-0, in the first when Lee Lacy walked, stole second, went to third on catcher Matt Sinatro's throwing error and scored on Harper's sacrifice fly. Atlanta tied in the fifth when Candelaria wild-pitched in a run.