2013-07-17 220 views
1

我正在編碼一個簡單的音樂播放器。Python 2.7,pygame,梳理暫停和取消暫停按鈕。

我已經在Stackoverflow中搜索了其他問題,但是,解決方案不能用我的pygame構建。

我的代碼如下。我使用Tkinter來構建gui。

import sys 
from Tkinter import * 
import tkMessageBox 
import pygame 

myGui = Tk() 


def mClose(): 
    mExit = tkMessageBox.askokcancel(title="Quit", message="are you sure?") 
    if mExit ==True: 
     myGui.destroy() 
     return 

def mPlay():  
    pygame.mixer.init() 
    pygame.mixer.music.load("/home/david/Downloads/test.mp3") 
    pygame.mixer.music.play() 


def unPause(): 
    pygame.mixer.music.unpause()   


def mPause(): 
    pygame.mixer.music.pause() 



myGui.title("My Audio") 
myGui.geometry("200x200+600+300") 
mLabel = Label(myGui, text="My Audio").pack() 


''' Button for Closing App''' 
mButton = Button(myGui, text="Close", command = mClose).pack() 

'''Play Button''' 
mButton = Button(myGui, text="Play", command = mPlay).pack() 

'''Pause Button''' 
mButton = Button(myGui, text="Pause", command = mPause).pack() 

'''UnPause Button''' 
mButton = Button(myGui, text="UnPause", command = unPause).pack() 

我已經厭倦結合暫停和使用pygame.mixer.music.get_busy取消暫停()。但是,如果它被暫停,布爾值仍然返回true以便處於活動狀態。

我已經使用了以下無濟於事:

def play_pause(): 
    paused = not paused 
    if paused: pygame.mixer.music.unpause() 
    else: pygame.mixer.music.pause() 

我得到如下:

File "/home/david/Documents/tkinter_testing.py", line 29, in play_pause 
    paused = not paused 
UnboundLocalError: local variable 'paused' referenced before assignment. 

任何意見或幫助。預先感謝您的幫助。

回答

1

您正在爲paused分配一個值,但自行調用該值。我相信你要找的是什麼

paused = False 

paused = not True 
+0

他使用not paused來切換我認爲是布爾值的變量。不是真的是假的而不是假的 –

+0

@Decency如果'paused'最初被分配了一個值,那麼他的代碼將是正確的。但是,第一次運行「paused」的代碼沒有一個值,該值在賦值之前拋出它被引用的錯誤。 – nwalsh

+0

真的!我認爲它是最初設定的,但沒有注意到這個錯誤。在那種情況下,他有兩個問題。 :D –

1

您的邏輯是不正確的。

假設我們開始用攪拌機停頓了一下,所以:

paused is True 

我們稱之爲play_pause()來切換它,並暫停設置爲不暫停,所以現在:

paused is False 

所以我們執行else語句並暫停()調音臺,但它已經暫停。解決方法是將切換移動到設置之後(可能是最清晰的)或者顛倒if-else塊中調用的邏輯。