2015-04-22 76 views
1

我周圍搜索,並找到了很多方法如何通過從直接鏈接打開文件分配一個文件到一個變量,但我想知道如何分配一個文件到一個變量讀取功能,當用戶使用文件對話框打開文件(例如文件>打開>用戶選擇的文件)?Python:使用打開的文件對話框將文件分配給變量?

我試圖打開要傳遞到pyglet.media.load(variable containing file)的音樂文件。

它會返回錯誤:NameError: f is not defined

from tkinter import * 
from tkinter.filedialog import askopenfilename 
import pyglet 
from threading import Thread 

app = Tk() 
app.title("Music Player") 
app.geometry("600x200") 
have_avbin = True 

def openFile(): 
    song = filedialog.askopenfilename(filetypes = (("MP3 files", "*.mp3"),("All files","*.*"))) 
    f = song 
    return f 



#Creates menu bar for opening MP3s, and closing the program 
menu = Menu(app) 
file = Menu(menu) 
file.add_command(label='Open', command= openFile) # replace 'print' with the name of your open function 
file.add_command(label='Exit', command=app.destroy) # closes the tkinter window, ending the app 
menu.add_cascade(label='File', menu=file) 
app.config(menu=menu) 

#Run each app library mainloop in different python thread to prevent freezing 
def playMusic(): 
    global player_thread 
    player_thread = Thread(target=real_playMusic) 
    player_thread.start() 

def stopMusic(): 
    global player_thread 
    player_thread = Thread(target=real_stopMusic) 
    player_thread.start() 

#Play open file function attached to button 
def real_playMusic(): 
    music = pyglet.media.load(f); 
    music.play() 
    pyglet.app.run() 

#Stop the music function 
def real_stopMusic(): 
    pyglet.app.exit() 




#Play button creation 
btnPlay = Button(app, text ="Play", command = playMusic) 
btnPlay.grid() 


#Pause button creation 
btnPause = Button(app) 
btnPause.grid() 
btnPause.configure(text = "Stop", command = stopMusic) 



app.mainloop() # keep at the end 
+0

你需要做一些研究[功能](https://docs.python.org/3.4/tutorial/controlflow.html#defining-函數) - 具體來說,變量作用域和「返回」是如何工作的。 – TigerhawkT3

回答

1
have_avbin = True 
f='' # initialize this variable 

def openFile(): 
    global f # tell the function that we plan on modifying this global variable 
    f = filedialog.askopenfilename(filetypes = (("MP3 files", "*.mp3"),("All files","*.*"))) 
+0

謝謝你的幫助! –