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

1 说明:

1.1 锻炼python思维,小白级别,大神请飘过,讲解的通俗易懂。

1.2 python3.8,tkinter自带,在制作音乐*放播**器的时候需要歌词滚动*放播**,基于此,为本次设计出发点。

1.3 顺带复习python的基础知识,在代码的注释中,适合收藏和转发,慢慢品味,本人亲测过。

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

2 常规音乐*放播**器歌词显示如下

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

3 用python实现,试试看看。

4 首先需要了解和掌握:tkinter的Text如何实时显示insert的内容的方法。

4.1 代码一:1.py

'''
#方法一
from tkinter import *
import time
root = 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 tk
import time
root = 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 效果图

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

46时就不能显示继续的偶数,看不到了,bug

4.3 解决上面的这个bug

4.4 代码二:2.py

from tkinter import *
import time
root = 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 效果图

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

================================

基础知识是不是很枯燥呀!那就来实战代码

================================

5 准备

5.1 音乐文件mp3和lrc自己准备,网上去*载下**。

5.2 本机是:梦然的“少年.mp3”和歌词lrc结构如下

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

5.3 读取lrc文件和*放播**mp3音乐文件的音乐*放播**器,以前我讲过。

5.4 代码3.py

#---第1步:导出模块---
import pygame
import time
import tkinter as tk
#---第2步:窗口的相关初始化定义---
root=tk.Tk()
#主窗口的标题定义
root.title('tk音乐显示歌词的*放播**器')
#大小:2000x1200和坐标:x=500,y=0
root.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 效果图

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

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