简介
使用tkinter制作一个可以批量修改mp3的元数据,如标题,艺人,专辑等,还有封面
展示:
所需package
Package Version
---------- -------
mutagen 1.47.0
pillow 10.4.0
pip 24.2
setuptools 69.5.1
tk 0.1.0
wheel 0.43.0
制作UI界面
使用tkinter布局助手制作好UI界面,并绑定好事件
参考tkinter布局助手使用文档,需要创建三个文件,main.py control.py ui.py
然后复制代码到对应的文件,在control.py文件中,从ui文件导入Win,from ui import Win
还需要改一下这两个地方: ui: Win self.ui = ui
然后就可以调用ui.py文件里的组件实例了
编写事件处理
在对应绑定的函数中编写事件处理
此处为选择路径,点击按钮即可调用windows资源管理器选择文件,并接收文件路径,可以选择单个,多个文件,还可以选择整个目录
这是点击修改的事件,在这个函数里,获取用户填入的mp3地址和艺人,专辑,封面等信息,然后做一些判断,阻止出错,比如用户是否填信息,是否是多个文件路径,或者上传了非mp3文件等,
然后调用mp3的处理文件的函数,根据字段值判断应该调用对字段修改的函数还是封面处理的函数
mp3处理函数
这个就是处理mp3的文件
在ui.py文件的import底下写一个函数,让print重定向输出到这个文本框组件中
部件优化(重定向输出和超链接)
然后在这个文本框函数中调用重定向函数,此时,print将在这个文本框中输出
然后在ui.py中找到顶部文本框,添加文本,展示告示,将 我的博客 标记为 link,然后对link标记设置蓝色和下划线, 并设置 text.config(state='disabled') ,作用是在此之后不可以对此文本框进行编辑了,一定要在text.insert之后再写text.config(state='disabled') ,否则就不会展示text.insert的文本
然后使用tag_bind将标记为link的文本绑定open_link
在control.py文件中编写open_link函数,定义事件,打开网站
最终就是这个样子
打包之后的问题
使用 pyinstaller -i music.ico -w -F main.py 打包之后呢,可能会出现两个问题
第一个问题
打包之后exe文件的图标 就是这个 music.ico,有时能显示,有时不能显示
这是因为在电脑上比如桌面上鼠标右键查看,有大图标,中图标,小图标等,就需要这个ico图标里有不停尺寸的图标
可以在这个网站上制作
https://www.aconvert.com/cn/icon/
制作好的icon图片,是包含不同尺寸的
然后打包的时候, pyinstaller -i 后面使用这个ico就可以了
第二个问题
tk的ui界面的左上角的图标,在打包运行之后,找不到tk的左上角的图标文件
这是代码:
这是从pycharm里直接运行
这是打包之后:
如果想解决这个问题也可以,根据路径,如果是相对路径,比如我这个,我只需要在exe文件同一文件夹下放一个cs.ico就可以了,但是exe移动或者分享给别人,那还需要把图标也跟着移动,很麻烦
所以使用下面这种办法
读取ico,然后二进制读出转为base64写入到py文件中
然后在设置图标的时候,先打开一个ico文件,
导入py文件中的base64数据
from cs import img
读出之前ico的base64格式的数据,再写入到这个ico文件中
然后设置图标,再删除图标
这样的话,只需要把ico图标的base64的数据存储到一个py文件中,然后正常打包运行,程序在设置图标的时候,就会将这个py文件中的base64的数据生成一个ico文件,作为图标
打包
接下来在使用pyinstaller进行打包
pyinstaller -i music.ico -w -F main.py
评论区