龙空技术网

python-tkinter-text-insert的歌词动态滚动显示设计和思维

易三一世 341

前言:

当前各位老铁们对“python歌词”大概比较关怀,同学们都想要知道一些“python歌词”的相关资讯。那么小编同时在网摘上收集了一些关于“python歌词””的相关知识,希望我们能喜欢,小伙伴们一起来学习一下吧!

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))+'\n')  #可是到了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))+'\n')     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)+'\n')        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]+ '\n')  #倒着歌词显示,自己可以试试看看        #方法二:符合正常    text_1.insert(tk.END,dictLrc[key]+ '\n')    text_1.see(tk.END) #方法二的关键点    #----------------重点---------------------------------------------    root.update()tk.mainloop()

5.5 效果图

6 搞定,分享出来,打好基础。喜欢就收藏和转发,慢慢品味,思考。

标签: #python歌词