This is similar to coding the pause/unpause feature. We need an attribute that can toggle between the mute and unmute strings. Accordingly, add an attribute, as follows (see code 5.04—view.py):
toggle_mute_unmute = itertools.cycle(["mute","unmute"])
Then, modify the command callback to call the mute or unmute functions from the player class, change the button icon to the mute or unmute image, and shift the volume scale accordingly, as follows (see code 5.04—view.py):
def on_mute_unmute_button_clicked(self): action = next(self.toggle_mute_unmute) if action == 'mute': self.volume_at_time_of_mute = self.player.volume self.player.mute() self.volume_scale.set(0) self.mute_unmute_button.config(image=self.mute_icon) ...