1 说明:
1.1 锻炼python思维,小白级别,大神请飘过,讲解的通俗易懂。
1.2 python3.8,tkinter自带,在制作音乐播放器的时候需要歌词滚动播放,基于此,为本次设计出发点。
1.3 顺带复习python的基础知识,在代码的注释中,适合收藏和转发,慢慢品味,本人亲测过。
2 常规音乐播放器歌词显示如下
3 用python实现,试试看看。
4 首先需要了解和掌握:tkinter的Text如何实时显示insert的内容的方法。
4.1 代码一:1.py
'''#方法一from tkinter import *import timeroot = Tk()t = Text(root)t.pack()# 从0~100取整数,range函数# iter函数用来生成迭代器# 唯一需要注意下的就是next中必须控制iterator的结束条件,不然就死循环了it = iter(range(100))while True: #tk的窗口的文本text显示的是打印0~99的偶数 t.insert(END,str(next(it))+'') #可是到了46,就不动了 #终端打印0~99的奇数 print(next(it)) root.update() #窗口需要更新 time.sleep(1)root.mainloop()'''#方法二import tkinter as tkimport timeroot = tk.Tk()t = tk.Text(root)t.pack()it = iter(range(100))while True: t.insert(tk.END,str(next(it))+'') print(next(it)) root.update() time.sleep(1)root.mainloop()
4.2 效果图
46时就不能显示继续的偶数,看不到了,bug
4.3 解决上面的这个bug
4.4 代码二:2.py
from tkinter import *import timeroot = Tk()t = Text(root)t.pack()#定义goon函数def Go_on(): for i in range(50): t.insert(END,'a_'+str(i)+'') time.sleep(0.1) t.see(END) #关键点 t.update() #定义按钮goBtn = Button(text = "Go!",command = Go_on)goBtn.pack()root.mainloop()
4.5 效果图
================================
基础知识是不是很枯燥呀!那就来实战代码
================================
5 准备
5.1 音乐文件mp3和lrc自己准备,网上去下载。
5.2 本机是:梦然的“少年.mp3”和歌词lrc结构如下
5.3 读取lrc文件和播放mp3音乐文件的音乐播放器,以前我讲过。
5.4 代码3.py
#---第1步:导出模块---import pygameimport timeimport tkinter as tk#---第2步:窗口的相关初始化定义---root=tk.Tk()#主窗口的标题定义root.title('tk音乐显示歌词的播放器')#大小:2000x1200和坐标:x=500,y=0root.geometry("2000x1200+500+0")#---第3步:歌词动态显示框的定义和布局---text_1=tk.Text(root,height=12,width=64,font=('楷体',12,'bold'),bg='black',fg='yellow')text_1.place(x=600,y=50)#---第4步:打开歌词lrc文件with open("/home/xgj/Desktop/pythonsn11/sn.lrc","r") as f: lrc_list = f.readlines() #将列表转换为字符串,重点讲解 strLrc=''.join(lrc_list)#定义一个存放lrc歌词的空的字典dictLrc = {}# 对歌词进行按行切割lineListLrc = strLrc.splitlines()# 遍历每一行歌词for lineLrc in lineListLrc: # 时间和歌词分开 listLrc = lineLrc.split("]") timeLrc = listLrc[0][1:].split(':') # 转换时间格式 times = float(timeLrc[0]) * 60 + float(timeLrc[1]) # 把时间当做key,歌词当做value存放在字典中 dictLrc[times] = listLrc[1]tempTime = 0# 音频初始化pygame.mixer.init()# 加载音频文件路径 (路径必须真实存在,音频文件格式支持mp3/ogg等格式)pygame.mixer.music.load('/home/xgj/Desktop/pythonsn11/sn.mp3')for key in dictLrc.keys(): tempTime = key - tempTime # 判断是否在播放音乐 if not pygame.mixer.music.get_busy(): pygame.mixer.music.play() # 歌词显示的时间 time.sleep(tempTime) # 终端显示歌词 print(dictLrc[key]) #这个不够满意,所以需要窗口界面化显示歌词 tempTime = key #----------------重点--------------------------------------------- #tkinter的知识:text.insert(index,string) index = x.y的形式,x表示行,y表示列 #方法一:不正常,有bug #text_1.insert(1.0,dictLrc[key]+ '') #倒着歌词显示,自己可以试试看看 #方法二:符合正常 text_1.insert(tk.END,dictLrc[key]+ '') text_1.see(tk.END) #方法二的关键点 #----------------重点--------------------------------------------- root.update()tk.mainloop()
5.5 效果图