python tk combobox设置值为空_python-tkinter-text-insert的歌词动态滚动显示设计和思维

1 说明:

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

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

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

9320971c95a24acaa7d3a0c5c2362d4e.png

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

3ae1f6029d13a8b6afc15bda12fca0c9.gif

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 效果图

56b979c102a28d9331749c2c9476c5e4.gif

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 效果图

8ff49ac45059e7934b454070ef3f5e41.gif

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

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

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

5 准备

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

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

0e8c8a62e6a977c2acd47d9c0d81d79e.png

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 效果图

e4b83a2c48b35a90d9eadf9f709a57a3.gif

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值