如何解决Tkinter-遍历mp3文件以编辑标签 循环浏览文件 tkinter gui 尝试将两者混在一起
我正在学习python / tkinter,作为一个项目,我试图创建一个GUI以编辑mp3标签。
我有一个for循环,它将遍历目录中的所有目录/文件,并为每个文件返回标签。 我也有一个tkinter代码,它将创建一个带有标签,按钮和文本框的窗口,以提供一个新标签。现在,我将重点放在genre标签上,但我计划在继续构建此代码时对其进行扩展。
我想要一个GUI,该GUI显示文件中的标签,并允许输入新文本,当我按下更新按钮以及获取目录中下一个文件的信息时,这些新文本将被写入mp3。编辑。
另外,我的代码正在运行。当我尝试将os.walk循环放入tkinter主循环时,它无法正常工作。我感到自己正在接近这个错误。
有人可以帮助我了解我的方法有什么问题吗?
循环浏览文件
import mutagen
import os
list_of_genres = []
for root,dirs,files in os.walk('C:\Music'):
for name in files:
music_file = os.path.join(root,name)
try:
filetags = mutagen.File(music_file,easy = True)
genre = filetags.tags['genre']
list_of_genres.append(genre)
except:
list_of_errors.append(music_file)
list_of_genres
tkinter gui
from tkinter import *
def click():
#this collects the text from the text entry Box
entered_text=textentry.get()
output.delete(0.0,END)
#try:
#except:
def close_window():
window.destroy()
#exit() #### This will kill kernel
# main:
window = Tk()
window.title('Genre Editor v.0001')
window.configure(background='black')
# my photo
photo1 = PhotoImage(file = 'C:\Music\Blank 185\Dido Ranch\albumartSmall.gif')
# create labels
Label (window,image=photo1,bg='black') .grid(row=0)
Label(window,text = 'Artist: ',bg='black',fg='white',font='none 12 bold').grid(row=1,sticky=W)
Label(window,text = 'Current Genre: ',font='none 12 bold').grid(row=2,text = 'New Genre: ',font='none 12 bold').grid(row=3,sticky=W)
# Box for text input
textentry = Entry(window,width=30,bg='white') .grid(row=3,column=1,columnspan=2)
# action buttons
Button(window,text='Quit',width=15,command=close_window
).grid(row=4,column = 0,padx=5,pady=5,sticky=W)
Button(window,text='No Change',command=''
).grid(row=4,column = 1,text='Update Genre',command=click
).grid(row=4,column = 2,sticky=W)
window.mainloop()
尝试将两者混在一起
import os
from tkinter import *
import mutagen
def click():
entered_text=textentry.get()
output.delete(0.0,END)
def close_window():
window.destroy()
# main:
window = Tk()
window.title('Genre Editor v.0001')
window.configure(background='black')
list_of_errors = []
list_of_genres = []
for root,easy = True)
photo1 = PhotoImage(
file = 'C:\Music\Blank 185\Dido Ranch\albumartSmall.gif')
Label (window,bg='black') .grid(row=0)
Label(window,text = 'Artist: '+ artist,sticky=W)
Label(window,text = 'Current Genre: '+ genre,sticky=W)
textentry = Entry(window,bg='white'
) .grid(row=3,columnspan=2)
Button(window,command=close_window
).grid(row=4,sticky=W)
Button(window,command=''
).grid(row=4,command=click
).grid(row=4,sticky=W)
except:
list_of_errors.append(music_file)
window.mainloop()
解决方法
代码的主要问题是文件循环。 GUI应用程序是基于事件的,因此必须使用该按钮移动到下一个文件。对于控件,请一次构建它们,然后在加载新文件时更新值。
尝试此代码。它将标记数据加载到每个文件的表单中。
import os
from tkinter import *
import mutagen
def click(): # next file
global lblArtist,lblGenre,lblNewGenre,curFile
entered_text=textentryVar.get()
#output.delete(0.0,END) # what does this do ?
while curFile < len(lstFile):
curFile += 1
try:
load_file(curFile) # next file
break # load success
except Exception as ex:
print("Load failed:",lstFile[curFile],ex)
curFile += 1 # go to next file
else: # done files
lblArtist['text'] = "--- Done All Files ---"
lblGenre['text'] = ""
def close_window():
window.destroy()
def load_file(i): # load tags
global lblArtist,lblNewGenre
filetags = mutagen.File(lstFile[i],easy = True)
print(lblArtist)
lblArtist['text'] = filetags['artist'][0]
lblGenre['text'] = filetags['genre'][0]
lblNewGenre['text'] = ""
lstFile = []
for root,dirs,files in os.walk(r'C:\Music'): # all files in folder
for name in files:
lstFile.append(os.path.join(root,name))
# main:
window = Tk()
window.title('Genre Editor v.0001')
window.configure(background='black')
# build form
lblArtist = Label(window,text = 'Artist: ',bg='black',fg='white',font=("times",12,"bold"))
lblArtist.grid(row=1,sticky=W)
lblGenre = Label(window,text = 'Current Genre: ',"bold"))
lblGenre.grid(row=2,sticky=W)
lblNewGenre = Label(window,text = 'New Genre: ',"bold"))
lblNewGenre.grid(row=3,sticky=W)
textentryVar = StringVar() # entry box needs linked variable
textentry = Entry(window,textvariable=textentryVar,width=30,bg='white' ) .grid(row=3,column=1,columnspan=2)
Button(window,text='Quit',width=15,command=close_window ).grid(row=4,column = 0,padx=5,pady=5,sticky=W)
Button(window,text='No Change',command='' ).grid(row=4,column = 1,text='Update Genre',command=click ).grid(row=4,column = 2,sticky=W)
list_of_errors = []
list_of_genres = []
# start file counter
curFile = 0
load_file(curFile) # load first file
window.mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。