2017-10-17 19 views
0

J'ai une cascade de menus avec une case à cocher pour activer/désactiver la musique de fond dans une application (en utilisant python tkinter). Lorsque l'application est exécutée (via root.mainloop()), la musique de fond est déjà en cours de lecture et la case cochée est cochée comme je le souhaite (indiquant son activation).Activer et désactiver la musique en fonction de CheckButton

Lorsque je désactive le bouton de contrôle, le son est désactivé en raison de la commande self.sound_off.

Le problème est lorsque je clique à nouveau sur le bouton (et la coche apparaît), le son ne s'allume pas. Je me rends compte que c'est parce que la commande que j'ai spécifiée dans checkbutton est command = sound.off(). Mais je ne suis pas sûr de savoir comment faire en sorte que lorsque la coche apparaît, le son joue (ou ne se répète pas) et quand la coche n'est pas là, le son fait une pause.

# within def __init__(self, master) of the app 
self.add_sound() 

self._value = IntVar(value=1) 

menubar = tk.Menu(master) 
master.config(menu=menubar) 
filemenu = tk.Menu(menubar)   
filemenu.add_checkbutton(label="Music", onvalue=1, offvalue=0, variable= 
          self._value, command=self.sound_off) 


def add_soud(self): 
    pygame.mixer.music.load("Sound.mp3") 
    pygame.mixer.music.set_volume(0.2) 
    pygame.mixer.music.play(-1) 

def sound_off(self): 
    pygame.mixer.music.pause() 

def sound_on(self): 
    pygame.mixer.music.unpause() 

#Am I supposed to have some sort of 'if' statement to check if the onvalue is 
#0 or 1? 

Toute aide est appréciée.

Répondre

0

Cela fonctionnerait

filemenu.add_checkbutton(label="Music", onvalue=1, offvalue=0, variable= 
         self.sound_value, command=self.sound_manipulation) 

et

def sound_manipulation(self): 
    if self.sound_value.get() == 1: 
     pygame.mixer.music.unpause() 
    else: 
     pygame.mixer.music.pause()