【问题标题】:Python: Using open file dialogue to assign file to a variable?Python:使用打开文件对话框将文件分配给变量?
【发布时间】:2015-06-30 21:33:23
【问题描述】:

我四处搜索并找到了许多关于如何通过从直接链接打开文件来将文件分配给变量的方法,但我想知道如何将文件分配给函数以供函数读取,当用户使用文件对话框打开文件(例如文件>打开>用户选择的文件)?

我正在尝试打开要传递给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

【问题讨论】:

  • 您需要对functions 进行一些研究——特别是变量范围和return 的工作原理。

标签: python variables fileopendialog


【解决方案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","*.*")))

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    相关资源
    最近更新 更多