微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tkinter-遍历mp3文件以编辑标签 循环浏览文件 tkinter gui 尝试将两者混在一起

如何解决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 举报,一经查实,本站将立刻删除。