怎么用线程刷新 tkinter 进度条_tkinter做一个简易提词板(2)
书接上文
花果山美男子:tkinter做一个简易提词板zhuanlan.zhihu.com
上回说到,文字的动态效果还可以用after方法和StringVar来实现,今天我们就用它们来重新制作提词板吧。
思路差不多,直接上代码:
import re
from tkinter import *top = tkinter.Tk()
top.title('提词板')
top.geometry(top,800x80)
f = open('C:/Users/lin042/Desktop/歌词.txt','rb').readlines()
var1 = StringVar(value='')
var2 = StringVar(value='')
mes0 = tkinter.Label(top,textvariable=var1,font=('黑体', 20),fg='Goldenrod')
mes0.pack()
mes1 = tkinter.Label(top,textvariable=var2,font=('黑体', 20),fg='Goldenrod')
mes1.pack()j=0 #歌词行数
k=11 #每个字在当句的位置下标
i="" #下一次刷新的内容
flag=True #是否暂停
is_run = False #是否正在运行
ti,t0=0,1
tt=0def show(var1, var2):global j,k,i,flag,ti,t0,ttlrc = f[j].decode().strip()i+=lrc[k]#两行提词板交替更新if j%2==0:var1.set(i)else:var2.set(i)k+=1if k==len(lrc):j+=1 i=""k=11if j==len(f):returnif j< len(f): #这里是j而不是j+1,因为提词板需要提前一句 t0=ti #记录上一次的起始时间点lrc2 = f[j].decode().strip()m = 10*int(lrc2[1]) + int(lrc2[2])s = 10*int(lrc2[4]) + int(lrc2[5])ms = 100*int(lrc2[7]) + 10*int(lrc2[8]) + int(lrc2[9])ti = m*60 + s + ms/1000 #本句歌词的起始时间点#如果不是同一句,则计算两句的间隔时间(毫秒)if t0!=ti:tt=int(1000*(ti-t0)) #根据下一句歌词字数计算每个字的刷新间隔 w=int(tt/(len(lrc)-11))if flag:top.after(w, showImg, var1, var2) else:flag=Truereturn #开始
def lottery_start(var1, var2):global is_runif is_run: #判断是否正在运行returnis_run = Trueshow(var1, var2)
#暂停
def lottery_end():global flag, is_runif is_run:flag = Falseis_run = Falsesubmit_button = tkinter.Button(top, text ="想见你", font=('黑体', 10),fg='red',width=10,height=2,command = lambda: lottery_start(var1, var2))
submit_button.place(x=10, y=5)
submit_button = tkinter.Button(top, text ="不见了", font=('黑体', 10),fg='red',width=10,height=2,command = lambda: lottery_end())
submit_button.place(x=10, y=40)top.mainloop()
既然是提词板,唯一需要注意的就是如何让歌词按照时间来更新。由于是用after来设置刷新时间的,因此这次我们根据每两句歌词之间的时间间隔,来设置after()里面的第一个参数,也就是时间。
刷新间隔w=两句歌词的间隔/下一句歌词的字数
这个after函数需要递归调用,以实现界面的刷新。
注意事项:
command = lambda: lottery_start(var1, var2)
command = lambda: lottery_end()
这两句必须加上lambda,否则按钮就会失效,变成启动程序自动播放了。而且和之前不同的是,即使关联的函数没有参数,也要加上括号。
用同样的方法,我们还可以做很多程序,比如点名提问、滚动抽奖、谁去取外卖等等,我就做了一个“今天谁刷碗”的程序,反正怎么抽都是我刷就对了。
成果就不放了,今天懒得录屏。
怎么用线程刷新 tkinter 进度条_tkinter做一个简易提词板(2)相关推荐
- tkinter label_tkinter做一个简易提词板
我们看综艺的时候,经常能看到现场的提词板.今天我们就用tkinter做一个简单的提词板,用到了tkinter的label来动态显示文字. 我们就以最近火爆的<想见你>这首歌为例,按照歌词时 ...
- python 函数进度条怎么_python输出结果刷新及进度条的实现操作
print函数 python输出主要使用print函数,print函数介绍: print(*objects, sep=" ", end=" ", file=sy ...
- delphi 多个线程 多个进度条_多线程有哪些优点?- Python每日3题(多线程专题)
这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一 ...
- QT 定时关机、共享内存、启动浏览器、浏览器前进后退刷新、进度条、设置浏览器标题、QML入门
定时关机 .h #include <QTimer> #include <stdlib.h> #include <QByteArray>//构造函数 //system ...
- python tkinter进度条_在python tkinter中Canvas实现进度条显示的方法
如下所示: from tkinter import * import time #更新进度条函数 def change_schedule(now_schedule,all_schedule): can ...
- 艺赛旗(RPA)python 的 tkinter 进度条的实现
艺赛旗 RPA8.0全新首发免费下载 点击下载 http://www.i-search.com.cn/index.html?from=line1 请看程序运行过程: 进度条满了之后,能实现自动清理,这 ...
- linux进度条脚本,Linux下简易进度条的实现代码
在生活中,进度条是很常见的,那么,进度条是如何实现的呢? 首先,进度条的动态是利用人眼视觉暂留效果的.实际上是如下过程: 先输出:[= ]表示进度是1%,刷新之后 再输出:[== ].. ...
- elementui 进度条怎么做_小E,Excel中这样的进度条是怎么做出来的?
我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务.支持我,也为自己加油! 前面我们分享过如何做进度条: <Excel进度条启示:专 ...
- tkinter中text插入_tkinter做一个体重档案
很多健身软件都有体重档案的功能,用来记录自己过去的体重变化.今天我们也来做一个简单的小程序实现这个功能. 首先我上网找了一个tkinter做的万年历程序,然后在它的基础上,增加了绘制体重折线图.记录当 ...
最新文章
- keras 的 example 文件 variational_autoencoder.py 解析
- AIX上如何启动和停止系统服务
- php error 2,一起搞懂PHP的错误和异常(二)
- parcelable 缺点_成都金牛区茶道炭优缺点-兴木华木炭
- 新建第一个windows服务(Windows Service)
- 服务器的防火墙禁止了对指定通讯端口的访问,使用iptables限制访问网站指定端口...
- 《计算复杂性:现代方法》——第0章 记 号 约 定 0.1 对象的字符串表示
- 静态锁 java_为什么锁定对象必须是静态的?
- 【独家】阿里云罗庆超:对象存储 OSS 海量数据管理和应用最佳实践
- html帮助文档看不了,Service Log按照文档设置之后,在web页面看不到,帮助文档的图片有点问题(看不到了),能不能处理一下...
- VScode+Latex:代码和pdf互相跳转
- 电脑桌面计算机分区不显示,win10硬盘分区不见了怎么办_win10电脑硬盘分区不见了如何恢复...
- android默认壁纸的历史,Android 默认壁纸 简单分析
- 内存映射文件的优势劣势体会
- 苹果手机换了屏显示无服务器,苹果手机出现“无法验证此 iPhone 屏幕是正品”怎么办...
- html 下划线 鼠标手,(腾讯设计规范.ppt
- kvm 4.磁盘格式简介及使用磁盘格式转换的方式拍摄快照
- springboot+ssm+jsp大学生社团活动报名管理系统java
- vue+vuecli+webpack中使用mockjs模拟后端数据
- jQuery中的end()的定义与用法
热门文章
- PostgreSQL中Timestamp转成世纪秒(Unix时间戳)
- NTP-Windows 2008和win7下开启网络对时方法
- [Swift]LeetCode522. 最长特殊序列 II | Longest Uncommon Subsequence II
- ssh密钥分发之二:使用sshpass配合ssh-kopy-id编写脚本批量分发密钥:
- python模块和包(模块、包、发布模块)
- 20162328蔡文琛 第十周 周五 课上测试
- cocos2x (c++/lua) spine 文件的预加载
- hdu 3629 Convex
- SharePoint:扩展DVWP - 第3部分:把DVWP的功能链接放在同一行中
- 关于移除节点的IE和Firefox的兼容问题