2017-10-17 2 views
0

Ich habe eine Menü-Kaskade, die eine Check-Taste zum Ein-/Ausschalten von Hintergrundmusik zu einer App hat (mit python tkinter).Ein- und Ausschalten von Musik basierend auf CheckButton

Wenn die App ausgeführt wird (über root.mainloop()), wird die Hintergrundmusik bereits abgespielt und die Checkbox hat ein Häkchen, so wie ich es möchte (was darauf hinweist).

Wenn ich die Checktaste ausschalte, wird der Sound aufgrund des Befehls self.sound_off ausgeschaltet.

Das Problem ist, wenn ich erneut auf die Schaltfläche klicke (und das Häkchen erscheint), der Ton schaltet sich nicht ein. Ich erkenne das, weil der Befehl, den ich in checkbutton angegeben habe, command = sound.off() ist. Aber ich bin mir nicht sicher, wie man es so macht, dass wenn der Tick erscheint, der Sound spielt (oder nicht pausiert) und wenn der Tick nicht da ist, pausiert der Sound.

# 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? 

Jede Hilfe wird geschätzt.

Antwort

0

würde diese

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

und

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