2015-04-22 9 views
1

Я обыскал и нашел много способов, как назначить файл переменной, открыв файл по прямой ссылке, но мне было интересно, как назначить файл переменной, которая будет считаться функцией, когда пользователь использует диалог файла для открытия файла (например, File> open> user selected file)?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- функции) - в частности, как работают переменные scope и 'return'. – 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

Благодарим вас за помощь! –